声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2523|回复: 4

[编程技巧] 如何画一元三次方程的最小值曲线

[复制链接]
发表于 2008-2-13 19:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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

使用道具 举报

发表于 2008-2-14 09:54 | 显示全部楼层
原帖由 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=[a b c d];
rr=roots(ff);
P0=min(rr);
end
这样P0里就是 ...


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

“程序不认P0(x)”——1. 请把输入法切换为英文状态。2. matlab 规定数组的下标从1开始,并且为整数。建议好好看看 matlab 基础书,还有多阅读在本版置顶区中整理的给新手的帖子
 楼主| 发表于 2008-2-15 16:55 | 显示全部楼层
“把所有最小值都赋给一个变量”——这个话的确说得有点傻,理当用数组的。
““程序不认P0(x)”——1. 请把输入法切换为英文状态。2. matlab 规定数组的下标从1开始,并且为整数。”——改成英文输入,并且把x的范围变成1:1:10之后 ,问题就解决了。

接下来的问题是,怎么得到x在[0,1]和x取小数时候的最小值,然后画成个曲线。
我再研究研究哈,研究出来了再上来写
发表于 2008-2-16 18:47 | 显示全部楼层

回复 3楼 的帖子

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


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

评分

1

查看全部评分

 楼主| 发表于 2008-2-17 09:04 | 显示全部楼层
谢谢楼上的提醒。
        发现我第一次的叙述有错误,不应该是在“区间(x1,x2)上”。应该是,a、b、c、d都是e的函数,在区间[e1,e2]上上求出每一个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=[a b c d];
rr=roots(ff);

P(ee)=min(rr);
ee=ee+1;
end
plot(e,P,'k-')
对吧,这样e和P的值就是对应的了

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-18 10:45 , Processed in 0.072546 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表