在线等,matlab解一元三次方程写完代码运行出错,请求大神帮助纠错

我写的代码如下:symsxL=1:100;fori=1:length(L)x0=solve('0.1125*tan(11*pi/36)*L(i)*x^3-(tan(5*p... 我写的代码如下:
syms x
L = 1:100;
for i=1:length(L)
x0 = solve('0.1125*tan(11*pi/36)*L(i)*x^3 - (tan(5*pi/36) + tan(pi/6))*(0.1125*tan(2*pi/9)*tan(11*pi/36)*L(i) + 1)*x^2 + (0.1125*tan(11*pi/36)*tan(5*pi/36)*tan(pi/6)*(tan(2*pi/9))^2*L(i) + 2*(tan(2*pi/9) - tan(5*pi/36)*tan(pi/6)*tan(2*pi/9)))*x - (tan(2*pi/9))^2*(tan(5*pi/36) + tan(pi/6)) = 0');
x0 = eval(x0);
if isreal(x0) & x0<2
x(i) = x0;
end
end
plot(L,x)
我的问题是:我想让matlab解完一元三次方程后,每一个L(从1到100)只对应一个x值,(该x值必须是正实数,如果三个解中如果只有一个实数根就取这个实数为解;如果三个解中有两个正实数根就取较小的)

另:我的代码中之所以后面在if中写x0<2,只是我猜测L变得越大,很有可能最小正实数根是一点多(即小于2),最好是能让matlab自己选较小正实数根,但是我不会。
最后,如果大神能够顺利画出L和较小根一一对应的曲线,小弟还想问问怎么能求出这条曲线上的最小值的坐标?

代码最后出错:Error using plot
Conversion to double from sym is not possible.
希望matlab大神能够帮帮忙,小弟初学matlab,代码中和所提问题可能都比较“傻”希望大神指点迷津,万分感激,(刚用百度知道,账户只有5分,还得用来提问抵押,实在抱歉了)
展开
 我来答
kufemail
推荐于2016-02-14 · TA获得超过836个赞
知道小有建树答主
回答量:275
采纳率:50%
帮助的人:252万
展开全部

先不说其他的事情啊,先说这里面的几个不对的地方:

plot 函数调用的时候,语法是这样的plot(x, y),其中x 和 y 必须要有相同的长度,在你的代码中,if isreal(x0),就表示你在100个循环中不一定能找出100个值和你的100个L对应。

所以一开始必须先初始化一个输出,我在这里先把它叫做xFinal,使用这样的语句,xFinal = zeros(100, 1),这样生成一个100行,一列,全是0的数组。这样就能起码保证你在plot的时候不会出错,说你的两个变量长度不等。

然后再往下说,你在为了解方程,把x定义成为了符号量 syms,这样你在plot的时候,就会报错说你的数据类型不对,其中一个是L,全部整数,另外一个是符号量,显然不对,所以我另外做了一个变量出来,就是刚刚说的xFinal。

你解出来的x0,可能是很多值,你要从中找出符合条件的,你的条件是小于2的实数。那么你这里就少了一个循环,你必须把x0里面的值也都找一遍,才能出结果。


我给你改完的代码是这样的:

syms x

L = 1:100;

xFinal = zeros(100, 1);

for i=1:length(L)

x0 = solve('0.1125*tan(11*pi/36)*L(i)*x^3 - (tan(5*pi/36) + tan(pi/6))*(0.1125*tan(2*pi/9)*tan(11*pi/36)*L(i) + 1)*x^2 + (0.1125*tan(11*pi/36)*tan(5*pi/36)*tan(pi/6)*(tan(2*pi/9))^2*L(i) + 2*(tan(2*pi/9) - tan(5*pi/36)*tan(pi/6)*tan(2*pi/9)))*x - (tan(2*pi/9))^2*(tan(5*pi/36) + tan(pi/6)) = 0');

x0 = eval(x0);

    for j = 1:numel(x0)

        if (isreal(x0(j)) && x0(j)<2)

            xFinal(i) = x0(j);

        end

    end

end

plot(L,xFinal)

在下面就是输出结果


PS: 加分加财富真心不需要,只要上面的内容有帮助就可以了。

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

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式