声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 847|回复: 4

[编程技巧] 麻烦各位给解这个方程式一个思路

[复制链接]
发表于 2008-3-14 09:03 | 显示全部楼层 |阅读模式

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

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

x
方程式如下:

5sin(x)+sqrt(100-36cos(x))=c, c是常数,求x.
查了书和搜索,都是方程组的例子,麻烦给个思路,谢谢.
回复
分享到:

使用道具 举报

发表于 2008-3-14 09:35 | 显示全部楼层
可以先改为
f(x)=5sin(x)+sqrt(100-36cos(x))-c
画个图,确定其根的区域,再用牛顿法或二分法等去求方程的根.

[ 本帖最后由 songzy41 于 2008-3-14 09:42 编辑 ]
发表于 2008-3-14 09:39 | 显示全部楼层
先确定其根的区域,然后用fzero命令应该可以再各个区域内直接求解的吧
发表于 2008-3-15 10:38 | 显示全部楼层
如果有范围要求,就给个范围来约束一下,可以记为[a b],如果没有范围,就随便确定个数a,然后:
1、可以使用字符串表达式:
mZero = fzero('5*sin(x)+sqrt(100-36*cos(x))-c', [a b]);
注意:此时在你的要求范围内,可能没有零点值,函数将返回错误。

mZero = fzero('5*sin(x)+sqrt(100-36*cos(x))-c', a);
此时,函数将临近a处返回零点值

注意:
1)用字符串表达式来求解时,请注意要给表达式中的变量进行初始化值。如:
x = a:0.001:b;
2)如果你的变量名不是x,那么要用如下的方式来使用fzero函数:
fzero(@(变量名)(字符串表达式), 范围或数值);

2、可以使用符号表达式:
syms x;
y = 5 * sin(x)+sqrt(100-36*cos(x))-c
yFun = inline(y);
mZero = fzero(yFun, [a b]);

mZero = fzero(yFun, a);

评分

1

查看全部评分

 楼主| 发表于 2008-3-15 15:12 | 显示全部楼层
谢谢rap2009,你的答案很完美,参考书也不会有这样详细的解答,我这就去实践.
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-5-7 09:55 , Processed in 0.057741 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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