Matlab问题求解。

我写了个程序e=0.001;c=[5;4;3;2;1]Q=[54321;44321;33321;22221;11111];x=[x1;x2;x3;x4;x5];f=@(x... 我写了个程序
e=0.001;
c=[5;4;3;2;1]
Q=[5 4 3 2 1;4 4 3 2 1;3 3 3 2 1;2 2 2 2 1;1 1 1 1 1];
x=[x1;x2;x3;x4;x5];
f = @(x) (c.'*x + 1/2 * x.' * Q * x);
df = @(x) (c + Q *x);
x1=0;x2=0;x3=0;x4=0;x5=0;
flag=1;k=0;
Q=inv(Q);
d=-Q*df(x);
while flag
k=k+1;
if (norm(d)<e)
flag=0;
if k==1
x=x+d;
xstar=x
break;
else
xstar=x
break;
end
else
x=x+d;
d=-Q*df(x);
end
end
为什么我Matlab直接运行时会出现??? Undefined function or variable 'x1'.
然后我在开头加入一个syms x1 x2 x3 x4 x5;再运行
会提示
??? Function 'norm' is not defined for values of class 'sym'.

Error in ==> norm at 28
[varargout{1:nargout}] = builtin('norm', varargin{:});
然后再次用原程序运行(无syms的)就可以正常算出来了
我的Matlab版本是7.0.1的 请问这是什么问题能怎么解决
展开
 我来答
tianxiawulang
2013-12-22 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2593万
展开全部

分析

首先,恕我冒昧,这程序真的是你写的?

如果是,这么简单的问题不应该看不出来啊。

 

1、之所以【运行时会出现??? Undefined function or variable 'x1'.】,是因为程序中x1(还包括x2 x3 x4 x5)在使用的时候确实未定义。用到x1的最靠前的代码是:

x=[x1;x2;x3;x4;x5];

你可以看看,前面有x1定义吗?

 

2、之所以【加入一个syms x1 x2 x3 x4 x5;再运行,会提示??? Function 'norm' is not defined for values of class 'sym'.】,是因为求范数的函数norm对sym类型没有定义,而你用syms命令定义x1-x5是sym类型,进而x、再进而d都是sym类型,对d求范数当然会出错。

 

3、之所以【然后再次用原程序运行(无syms的)就可以正常算出来了】,是因为你前面加了syms命令后,尽管执行到norm的时候出错,但在此之前,已经执行了下面这一行:

x1=0;x2=0;x3=0;x4=0;x5=0;

这样你再次运行的时候,x1-x5都已经定义,当然就不会出现第一个错了;而此时x和d也不再是sym类型,求范数没问题,也就不会出现第二个错了。

 

修改

经过上面的分析,相信你应该知道怎么修改了,对,没错,就是把这一句

x1=0;x2=0;x3=0;x4=0;x5=0;

移到

x=[x1;x2;x3;x4;x5];

的前面就可以了。

追问
我去试试。谢谢指教。
我是个初学者。
总是遇到问题都是上来问的。哪里遇到了问题问一下然后按人家的提示去写
追答
不会有问题的,我看到你说的过程就判断出问题出在哪里了(上面写的也足够清晰),然后就是按照我说的方法改的。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式