cybwsgwz 发表于 2007-6-4 13:59

小弟做毕业设计遇到难题

cos(x)-0.5*x*sin(x)+k=0 (-1<k<1)首先k取一靠近-1的数假设(k=-0.9)然后k以0.1的大小增加,1.解上述方程且只取最小的正实根,如何编程??2.解上述方程取最小的第一和第二个正实根??怎么做??谢谢拉!!更明白点就是cos(x)-0.5*x*sin(x)+1.1=0(假设k=1.1)如何求出最小的正实根??如何求出最小的第一和第二个正实根??

[ 本帖最后由 eight 于 2007-6-4 14:49 编辑 ]

咕噜噜 发表于 2007-6-4 16:20

没时间帮你写程序,你可以用最简单二分法编程序
比较笨的办法是令分f=cos(x)-0.5*x*sin(x)+k,画出函数f随x的变化曲线,画出y=0的直线,捕捉交点,不过可能不是很准确

aplulu 发表于 2007-6-4 22:44

一定要用matlab吗?还有很多数学软件呀,比如LINGO,MATHEMATICA,LINDO等都可以实现呀。
小小弟有一个MATLAB程序,你看看行不行。
在MATLAB中提供了一个fzero函数,可以用来求单变量非线性方程的根。该函数的调用格式为:
    z=fzero('fname',x0,tol,trace)
其中fname是待求根的函数文件名,x0为搜索的起点。一个函数可能有多个根,但fzero函数只给出离x0最近的那个根。tol控制结果的相对精度,缺省时取tol=eps,trace指定迭代信息是否在运算中显示,为1时显示,为0时不显示,缺省时取trace=0。   
   步骤如下:
   (1) 建立函数文件funx.m。

function fx=funx(x)

fx= cos(x)-0.5*x*sin(x)+1.1;

(2) 调用fzero函数求根。

z=fzero('funx',0)
运行结果有许多个输出,你看看就知道了。
其它K值同理了吧,呵呵

xjzuo 发表于 2007-6-5 09:41

你这样写并没有多个根输出.
咕噜噜 说的画图法倒是常用的: 画图,观察,取合适的初值,用fzero(@funx,x0)求根;
更好的方法是作循环求根,将根存入一个数组(或向量),sort(x(x>0))......

cybwsgwz 发表于 2007-6-5 21:48

谢谢大家的提议!!小弟已经解决!!
页: [1]
查看完整版本: 小弟做毕业设计遇到难题