24小时热门版块排行榜    

查看: 2185  |  回复: 6

八角寨

银虫 (著名写手)

[求助] 如何用matlab求方程 sin(2*x)=log10(x) 的解,谢谢。 已有1人参与

方程 sin(2*x)=log10(x) 有5个解, 如何用matlab求其数值解呢,谢谢。

利用 solve('sin(2*x)=log10(x)','x') 求助,答案不对。
请高手帮忙,谢谢。
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
八角寨: 金币+9, ★★★★★最佳答案, 非常好,感谢版主。但如果是 sin(5*x)=log10(x),语句中最后的[0.1 1 2 3 4 5 6 7 8 8.5] 该如何改变?再次感谢。 2015-09-24 11:50:58
solve函数是解符号解的,既然要求数值解,用fsolve函数更合适。

clear all;clc
[x fval]=fsolve(@(x) sin(2*x)-log10(x),[0.1 1 2 3 4 5 6 7 8 8.5]);
x=round(1e6*x)/1e6;
x=unique(x)

求得五个数值解:

x =

    1.4846    3.4235    4.3651    6.7735    7.3312
MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
2楼2015-09-24 08:43:29
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)

引用回帖:
2楼: Originally posted by 月只蓝 at 2015-09-24 08:43:29
solve函数是解符号解的,既然要求数值解,用fsolve函数更合适。

clear all;clc
=fsolve(@(x) sin(2*x)-log10(x),);
x=round(1e6*x)/1e6;
x=unique(x)

求得五个数值解:

x =

    1.4846    3.4235    ...

此时有15个解,代码如下:

clear all;clc
[x fval]=fsolve(@(x) sin(5*x)-log10(x),linspace(0.5,9.5,20));
x=round(1e6*x)/1e6;
x_answer=unique(x)
figure(1)
xx=linspace(0,10,100);
yy=sin(5*xx)-log10(xx);
plot(xx,yy,'b',[0 10],[0 0],'r')

代码绘出了该函数图形,蓝线和红线交点的个数,即解的个数。
计算结果,有15个:
x_answer =

  Columns 1 through 12

    0.6641    1.2780    1.8318    2.5988    3.0408    3.8963    4.2620    5.1858    5.4884    6.4724    6.7167    7.7592

  Columns 13 through 15

    7.9442    9.0516    9.1658
MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
3楼2015-09-24 12:33:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)

引用回帖:
2楼: Originally posted by 月只蓝 at 2015-09-24 08:43:29
solve函数是解符号解的,既然要求数值解,用fsolve函数更合适。

clear all;clc
=fsolve(@(x) sin(2*x)-log10(x),);
x=round(1e6*x)/1e6;
x=unique(x)

求得五个数值解:

x =

    1.4846    3.4235    ...

解这种多解方程,首先应观察一下零点位于的范围,比如sin(2*x)-log10(x)图形显示,该方程零点位于[1,8]的范围内,那么用代码:
[x fval]=fsolve(@(x) sin(2*x)-log10(x),linspace(1,8,20));
即可获得方程所有解,不需要手动输入“语句中最后的[0.1 1 2 3 4 5 6 7 8 8.5]”。
linspace(1,8,20)中20这个数字应大于零点的个数。
比如求 sin(10*x)-log10(x),观察图形有31个解,这个时候就把该数值设得大一些,同时xx=linspace(0,10,500)中取点个数也设置为500这样的大数,因为解多了,这样做可以防止漏解:
clear all;clc
[x fval]=fsolve(@(x) sin(10*x)-log10(x),linspace(0.2,9.7,100));
x=round(1e6*x)/1e6;
x_answer=unique(x)
figure(1)
xx=linspace(0,10,500);
yy=sin(10*xx)-log10(xx);
plot(xx,yy,'b',[0 10],[0 0],'r')

可求得31个解,如下:
x_answer =

  Columns 1 through 12

    0.3601    0.6064    0.9449    1.2669    1.5516    1.9135    2.1649    2.5552    2.7814    3.1945    3.3997    3.8322

  Columns 13 through 24

    4.0192    4.4690    4.6394    5.1052    5.2602    5.7410    5.8812    6.3767    6.5024    7.0123    7.1236    7.6482

  Columns 25 through 31

    7.7445    8.2845    8.3649    8.9219    8.9842    9.5621    9.6007
MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
4楼2015-09-24 12:48:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

八角寨

银虫 (著名写手)

引用回帖:
4楼: Originally posted by 月只蓝 at 2015-09-24 12:48:38
解这种多解方程,首先应观察一下零点位于的范围,比如sin(2*x)-log10(x)图形显示,该方程零点位于的范围内,那么用代码:
=fsolve(@(x) sin(2*x)-log10(x),linspace(1,8,20));
即可获得方程所有解,不需要手动输 ...

帮主知识渊博,感谢版主的耐心帮忙。
5楼2015-09-24 16:15:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)

引用回帖:
4楼: Originally posted by 月只蓝 at 2015-09-24 12:48:38
解这种多解方程,首先应观察一下零点位于的范围,比如sin(2*x)-log10(x)图形显示,该方程零点位于的范围内,那么用代码:
=fsolve(@(x) sin(2*x)-log10(x),linspace(1,8,20));
即可获得方程所有解,不需要手动输 ...

该段代码运行后,产生的图如附图1所示。
如何用matlab求方程 sin(2*x)=log10(x) 的解,谢谢。
附图1.png

MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
6楼2016-01-26 09:03:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

you叫宝哥

新虫 (初入文坛)

引用回帖:
4楼: Originally posted by 月只蓝 at 2015-09-24 12:48:38
解这种多解方程,首先应观察一下零点位于的范围,比如sin(2*x)-log10(x)图形显示,该方程零点位于的范围内,那么用代码:
=fsolve(@(x) sin(2*x)-log10(x),linspace(1,8,20));
即可获得方程所有解,不需要手动输 ...

感谢指导!
7楼2018-08-28 13:48:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 八角寨 的主题更新
信息提示
请填处理意见