查看: 220|回复: 7|关注: 0

[已答复] 求解三角复合方程 y = sin(x)*x*x

[复制链接]

新手

5 麦片

财富积分


050


3

主题

9

帖子

0

最佳答案
发表于 2019-1-21 13:45:32 | 显示全部楼层 |阅读模式
最近在写一个程序需要用到一个变量值,而变量值是[y = sin(x)*x*x ]中的x值。
实际运算过程中我会先得到y值然后去求x值,求解方程我打算使用matlab求解,现有手头的软件版本为2015版本。
我按照网上的写求方程的代码进行尝试求解,但是运算出来的结果我认为是错的,代码如下:
  1. >> solve(sin(x).*x.*x==1,x)
  2. Warning: Cannot solve symbolically. Returning a numeric approximation instead.
  3. > In solve (line 303)

  4. ans =

  5. -226.19465151348032175864732023371

  6. >>
复制代码
上面是我打算当y=1的时候求出x值,但是结果是-226,很明显是错的,我不知道是我代码写的有错误还是我代码写的有错误?正确的是需要怎么写?
方程为y等于sin(x)在乘以x的平方,是因为sin(x)里面的x和外面的x的含义不同吗?

论坛优秀回答者

中级

893 麦片

财富积分


5001500


0

主题

2279

帖子

194

最佳答案
  • 关注者: 127
发表于 2019-1-21 14:18:46 | 显示全部楼层
数值解,多解,没错啊。

新手

5 麦片

财富积分


050


3

主题

9

帖子

0

最佳答案
 楼主| 发表于 2019-1-21 14:21:45 | 显示全部楼层
shihe 发表于 2019-1-21 14:18
数值解,多解,没错啊。

验证的过程我是这样的,我直接将MATLAB算出来的值带入到方程里面进行计算。显然 y= sin(x)*x*x,单单x的平方就已经远远大于1了,那最终我用casio计算器算出来是 36924.84911

论坛优秀回答者

中级

1192 麦片

财富积分


5001500


3

主题

792

帖子

181

最佳答案
  • 关注者: 73
发表于 2019-1-21 14:40:31 | 显示全部楼层
「周斌」 发表于 2019-1-21 02:21
验证的过程我是这样的,我直接将MATLAB算出来的值带入到方程里面进行计算。显然 y= sin(x)*x*x,单单x的 ...

不要拿普通计算器算,光是浮点误差就够受的了
sin(-226.19465151348032175864732023371) = 1.9545e-05
(-226.19465151348032175864732023371)^2 = 5.1164e+04
两者之积仍然是1

你这个函数是典型的震荡函数,有无数解的
一般都是用fsolve求某个数值附近的解

f = @(x) sin(x).*x.*x-1;
fsolve(f,1) = 1.06822354421472
fsolve(f,3) = 3.03264541838900

论坛优秀回答者

权威

3211 麦片

财富积分



2

主题

3501

帖子

721

最佳答案
  • 关注者: 148
发表于 2019-1-21 14:54:50 | 显示全部楼层
「周斌」 发表于 2019-1-21 14:21
验证的过程我是这样的,我直接将MATLAB算出来的值带入到方程里面进行计算。显然 y= sin(x)*x*x,单单x的 ...

a=vpa('-226.19465151348032175864732023371');
sin(a)*a^2
ans =0.99999999999999999999999994760111

新手

5 麦片

财富积分


050


3

主题

9

帖子

0

最佳答案
 楼主| 发表于 2019-1-21 15:49:56 | 显示全部楼层
TouAkira 发表于 2019-1-21 14:40
不要拿普通计算器算,光是浮点误差就够受的了
sin(-226.19465151348032175864732023371) = 1.9545e-05
(- ...

十分感谢,当时看到这个结果第一反应是直接用计算机计算,没有想用MATLAB直接去验证。再次感谢,可能要转变思维了,不能以计算机结果为准了,哈哈。

新手

5 麦片

财富积分


050


3

主题

9

帖子

0

最佳答案
 楼主| 发表于 2019-1-21 15:51:00 | 显示全部楼层
maple1314168 发表于 2019-1-21 14:54
a=vpa('-226.19465151348032175864732023371');
sin(a)*a^2
ans =0.99999999999999999999999994760111

十分感谢,谢谢给出优化代码,我是刚接触AMTLAB,之前一直写C++代码,所以对于MATLAB编程还是很陌生。

新手

5 麦片

财富积分


050


3

主题

9

帖子

0

最佳答案
 楼主| 发表于 2019-1-21 15:55:11 | 显示全部楼层
TouAkira 发表于 2019-1-21 14:40
不要拿普通计算器算,光是浮点误差就够受的了
sin(-226.19465151348032175864732023371) = 1.9545e-05
(- ...

从这点,我已经觉得MATLAB已经很强大了:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

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