MATLAB中diff函数使用遇到问题求助 100

B=[0.1:0.1:0.9];H=[13.1115.7925.7930.5333.1635.7938.4267];y=polyfit(B,H,3);y3=polyval... B = [0.1:0.1:0.9];
H = [13.11 15.79 25.79 30.53 33.16 35.79 38.42 6 7];
y = polyfit(B,H,3);
y3=polyval(y,B);
plot (B,y3);
n = length(y);
ss = '';
for k = 1:n
yy = num2str(y(k));
ss = strcat(ss,['+' '(' yy ')' '*' 'x' '^' num2str(n+1-k)]);
end
dss = diff(ss,'x');
ddss = diff(dss,'x');
xx = solve(ddss);
xy = eval(subs(dss,'x',xx));
[dmax,index] = max(xy);
x = xx(index);
y = eval(subs(ss,'x',x))
x = eval(x)这是我的代码,他提示x必须为正整数,我这个是字符串,但是不用字符串形式,x就是自变量定义不了
展开
 我来答
小菜鸟2无聊写代码
2021-07-23 · TA获得超过1058个赞
知道小有建树答主
回答量:932
采纳率:87%
帮助的人:166万
展开全部

MATLAB中的diff函数需要的参数都得是sym类型的符号变量,有一些比较旧的教科书中使用的是字符串变量,与现在的新版本的MATLAB不符,字符串变量的用法被移除了,所以出错。

代码应该做如下修改以达预期效果:

①把第12行“dss = diff(ss,'x');”改为“syms x;dss=diff(eval(ss),x);”

②第13行“ddss = diff(dss,'x');”改为“ddss = diff(dss,x);”

③第18行“y = eval(subs(eval(ss),'x',x))”改为“y = eval(subs(eval(ss),sym('x'),x))”

修改后的代码还是19行,代码截图和运行效果如下:

前15行

16-19行

B = [0.1:0.1:0.9];

H = [13.11 15.79 25.79 30.53 33.16 35.79 38.42 6 7];


y = polyfit(B,H,3);


y3=polyval(y,B);


plot (B,y3);

n = length(y);

ss = '';


for k = 1:n;


yy = num2str(y(k));


ss = strcat(ss,['+' '(' yy ')' '*' 'x' '^' num2str(n+1-k)]);

end
;

syms x;dss = diff(eval(ss),x);

ddss = diff(dss,x);

xx = solve(ddss);


xy = eval(subs(dss,'x',xx));

[dmax,index] = max(xy);


x = xx(index);


y = eval(subs(eval(ss),sym('x'),x))
;disp(y);

x = eval(x);disp(x);

所画的图

运行结果的x变量和y变量的值

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式