Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
回复
 
主题工具 显示模式
旧 2008-10-21, 10:26   #1
endlich
初级会员
 
注册日期: 2008-10-14
年龄: 45
帖子: 20
声望力: 17
endlich 正向着好的方向发展
默认 [求助]为何没定义为符号变量的变量也成了符号变量

为何没定义为符号变量的变量也成了符号变量
程序如下:
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这样的变量很多,如果都要转换符号变量为数值变量的话那就太麻烦了!
endlich 当前离线   回复时引用此帖
旧 2008-10-21, 11:56   #2
watcher
高级会员
 
注册日期: 2008-04-02
年龄: 47
帖子: 175
声望力: 21
watcher 正向着好的方向发展
默认 回复: [求助]为何没定义为符号变量的变量也成了符号变量

这里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)的结构没变,比较有效率的做法是在函数中直接给出偏导函数,可以省去每次求偏导的运算量。
watcher 当前离线   回复时引用此帖
旧 2008-10-21, 12:54   #3
endlich
初级会员
 
注册日期: 2008-10-14
年龄: 45
帖子: 20
声望力: 17
endlich 正向着好的方向发展
默认 回复: [求助]为何没定义为符号变量的变量也成了符号变量

可以,看来得好好研究eval函数
endlich 当前离线   回复时引用此帖
旧 2008-10-22, 09:36   #4
endlich
初级会员
 
注册日期: 2008-10-14
年龄: 45
帖子: 20
声望力: 17
endlich 正向着好的方向发展
默认 回复: [求助]为何没定义为符号变量的变量也成了符号变量

现在又遇到新的问题,求完导数之后还要对此导数进行最优化(如题自变量x,y,k,k不赋值了),没法求,根本不认识,这个难道matlab都没法处理吗?我问了好几个同学,他们都说导数处理起来很麻烦,应该先手动求导,再对此倒数进行最优化。我的函数形式很复杂,要是手动求导的话非常麻烦!希望各位大侠予以指导!不胜感激!:lovely:
endlich 当前离线   回复时引用此帖
旧 2008-10-23, 09:14   #5
watcher
高级会员
 
注册日期: 2008-04-02
年龄: 47
帖子: 175
声望力: 21
watcher 正向着好的方向发展
默认 回复: [求助]为何没定义为符号变量的变量也成了符号变量

引用:
作者: endlich 查看帖子
现在又遇到新的问题,求完导数之后还要对此导数进行最优化(如题自变量x,y,k,k不赋值了),没法求,根本不认识,这个难道matlab都没法处理吗?我问了好几个同学,他们都说导数处理起来很麻烦,应该先手动求导,再对此倒数进行最优化。我的函数形式很复杂,要是手动求导的话非常麻烦!希望各位大侠予以指导!不...
只要被求导函数结构不变,就应该直接使用求导后的函数。至于你说的函数形式复杂,人工求导麻烦,我想diff等函数就是应付这种情况的吧,可以先通过diff让matlab帮你把导数求出来嘛。另外用maple也可以,毕竟matlab的符号运算核心是maple,只是上手比较难,工作量不是很大的话,不推荐。
watcher 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码



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


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