MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   MATLAB论坛 (https://www.labfans.com/bbs/forumdisplay.php?f=6)
-   -   [求助]为何没定义为符号变量的变量也成了符号变量 (https://www.labfans.com/bbs/showthread.php?t=4934)

endlich 2008-10-21 10:26

[求助]为何没定义为符号变量的变量也成了符号变量
 
为何没定义为符号变量的变量也成了符号变量
程序如下:
function xyz
clc
clear all
k=2;
w=fun(2,3)

function f=fun(x,y)
syms x2 y2
g='k*2*x2^2*y2';
f=diff(x2*g,'x2');
f=subs(f,[x2,y2],[x,y]);

运行结果为w=72*k
k为何成了符号变量,有没有办法让k成为数值变量啊?
我的程序里像k这样的变量很多,如果都要转换符号变量为数值变量的话那就太麻烦了!

watcher 2008-10-21 11:56

回复: [求助]为何没定义为符号变量的变量也成了符号变量
 
这里w是sym类型,maltab不会自动计算sym类型的值,要达到你的目的可以将function xyz的最后一行改为w=eval(fun(2,3))。

另外,function f=fun(x,y)的目的是对给定的(x,y)求解函数x*g(x,y)对x的偏导数的值。由于x*g(x,y)的结构没变,比较有效率的做法是在函数中直接给出偏导函数,可以省去每次求偏导的运算量。

endlich 2008-10-21 12:54

回复: [求助]为何没定义为符号变量的变量也成了符号变量
 
可以,看来得好好研究eval函数

endlich 2008-10-22 09:36

回复: [求助]为何没定义为符号变量的变量也成了符号变量
 
现在又遇到新的问题,求完导数之后还要对此导数进行最优化(如题自变量x,y,k,k不赋值了),没法求,根本不认识,这个难道matlab都没法处理吗?我问了好几个同学,他们都说导数处理起来很麻烦,应该先手动求导,再对此倒数进行最优化。我的函数形式很复杂,要是手动求导的话非常麻烦!希望各位大侠予以指导!不胜感激!:lovely:

watcher 2008-10-23 09:14

回复: [求助]为何没定义为符号变量的变量也成了符号变量
 
[QUOTE=endlich;18226]现在又遇到新的问题,求完导数之后还要对此导数进行最优化(如题自变量x,y,k,k不赋值了),没法求,根本不认识,这个难道matlab都没法处理吗?我问了好几个同学,他们都说导数处理起来很麻烦,应该先手动求导,再对此倒数进行最优化。我的函数形式很复杂,要是手动求导的话非常麻烦!希望各位大侠予以指导!不...[/QUOTE]

只要被求导函数结构不变,就应该直接使用求导后的函数。至于你说的函数形式复杂,人工求导麻烦,我想diff等函数就是应付这种情况的吧,可以先通过diff让matlab帮你把导数求出来嘛。另外用maple也可以,毕竟matlab的符号运算核心是maple,只是上手比较难,工作量不是很大的话,不推荐。


所有时间均为北京时间。现在的时间是 05:23

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.