shuang_11_17 发表于 2008-2-13 19:46

如何画一元三次方程的最小值曲线

有方程a*x^3+b*x^2+c*x+d=0,要在区间(x1,x2)上求出每一个x对应的方程最小值,然后再绘制这些最小值的曲线。
    我的想法是循环
for x=0:0.1:10
ff=;
rr=roots(ff);
P0=min(rr);
end
这样P0里就是方程的最小值了,但是只能存下一次求解的结果,怎么能把整个区间上的最小值都赋给一个变量呢?是不是要用数组?可是我这么写
for x=0:0.1:10
ff=;
rr=roots(ff);
P0(x)=min(rr);
end
程序不认P0(x)
请问大家有什么办法解决呢?谢谢大家了,请帮忙

eight 发表于 2008-2-14 09:54

原帖由 shuang_11_17 于 2008-2-13 19:46 发表 http://www.chinavib.com/forum/images/common/back.gif
有方程a*x^3+b*x^2+c*x+d=0,要在区间(x1,x2)上求出每一个x对应的方程最小值,然后再绘制这些最小值的曲线。
    我的想法是循环
for x=0:0.1:10
ff=;
rr=roots(ff);
P0=min(rr);
end
这样P0里就是 ...

“把所有最小值都赋给一个变量”——没有哪个语言可以做到。如果每次得到的最小值在循环外面不再使用,可以使用变量存放,否则只能使用数组。建议楼主补补编程基础

“程序不认P0(x)”——1. 请把输入法切换为英文状态。2. matlab 规定数组的下标从1开始,并且为整数。建议好好看看 matlab 基础书,还有多阅读在本版置顶区中整理的给新手的帖子

shuang_11_17 发表于 2008-2-15 16:55

“把所有最小值都赋给一个变量”——这个话的确说得有点傻,理当用数组的。
““程序不认P0(x)”——1. 请把输入法切换为英文状态。2. matlab 规定数组的下标从1开始,并且为整数。”——改成英文输入,并且把x的范围变成1:1:10之后 ,问题就解决了。

接下来的问题是,怎么得到x在和x取小数时候的最小值,然后画成个曲线。
我再研究研究哈,研究出来了再上来写

sigma665 发表于 2008-2-16 18:47

回复 3楼 的帖子

"接下来的问题是,怎么得到x在和x取小数时候的最小值,然后画成个曲线。
我再研究研究哈,研究出来了再上来写"


利用length取x的长度
然后再循环,这样每个整数都和相应的x对应了

shuang_11_17 发表于 2008-2-17 09:04

谢谢楼上的提醒。
      发现我第一次的叙述有错误,不应该是在“区间(x1,x2)上”。应该是,a、b、c、d都是e的函数,在区间上上求出每一个e对应的方程最小值。
受小西的启发,程序是这样的:
ee=1;
for e=0:0.1:10;
a=-i02-2*betay*e-2*betax*e+ys^2-2*e*ys+e^2+xs^2-2*e*xs+e^2;
b=i02*(Pw+Py+Px)+2*e*(Px*betay+Py*betay+Px*betax+Py*betax)-ys^2*Px-xs^2*Py-e^2*(Px+Py)+2*e*(ys*Px+xs*Py);
c=-i02*(Px*Pw+Py*Pw+Px*Py)-2*Px*Py*e*(betax+betay);
d=i02*Px*Py*Pw;

ff=;
rr=roots(ff);

P(ee)=min(rr);
ee=ee+1;
end
plot(e,P,'k-')
对吧,这样e和P的值就是对应的了
页: [1]
查看完整版本: 如何画一元三次方程的最小值曲线