我究竟做错了什么?此表达式违反基本数学。

2次观看(过去30天)
Sandip Ghatge.
Sandip Ghatge. 20月12日
评论: Sandip Ghatge.于2020年5月13日
如果您运行此代码,您将获得
Si(1,1)= -1 [Si是下面提到的主要公式的正弦术语]
SQROOT(1,1)= 0.0026
mi = 0.0026.
因此,根据百分比主要公式
POS1(1,1)= 0.0026 + 0.0026 *( - 1)= 0
但答案Matlab正在返回我是0.002
这甚至是如何?
for循环是否有任何错误?
百分比定义参数值
FG = 2.1188;
fi = 2.7834;
ft = fg + fi;
h = 0.002;
k = 1864;
e = 0.7;
m = 0.001;
%初始化x
x =零(11,1);
x(1,1)= 0;
l = 0.002;
%公式1 - 确定新位置
为了我= 1:10
con1 =((ft * h) - (k *(h ^ 2)* 0.5))*(1-(e ^ 2));
x(i + 1,1)=(ft-(sqrt(ft ^ 2) - (2 * k *((con1)+((e ^ 2)*(ft * x(i,1) - (k* 0.5 *(x(i,1)^ 2)))))))))))/ k;
结尾
常量N&S初始化%
n =零(10,1);
s =零(10,1);
w =(2 * ft)/ m;
%计算常量n&s
为了我= 1:10
S(i)=(((w * l) - ((k *(l ^ 2))/ m)))*((e ^ 2-1)) - ((e ^ 2)*(x(i,1))*(w +((k *(x(x(i,1)))/ m))))));
结尾
sininv =零(10,1);
sqroot = zeros(10,1);
POS1 =零(5000,1);
POS2 =零(5000,1);
时间=零(5000,1);
m = 2 * ft;
时间(1,1)= 0;
为了我= 1:10
n(i,1)=((k *((x(i,1))^ 2)) - (2 * ft *(x(i,1))))));
Sininv(I,1)= Asin((x(i,1) - (m / 2 * k))/(sqrt(((m / 2 * k)^ 2)+(n(i,1)/ k))))));
SQROOT(I,1)= SQRT((((m /(2 * k))^ 2)+(n(i,1)/ k)));
为了J = 1:5000
时间(J + 1,1)=时间(J,1)+0.0001;
%公式2 - POS1
si =(siN((sqrt(k / m))*时间(1,1))+ sininv(1,1))));
mi = m /(2 * k);
%主要公式
POS1(J,1)= MI +(SQROOT(I,1))*(SIN((SQRT(k / m))*时间(j,1))+ sininv(i,1)));
结尾
结尾
2评论
Sandip Ghatge.
Sandip Ghatge. 20月12日
我只是检查si值,无论是-1还是不
关于我尝试多次的时间,但问题仍然尚未解决,
百分比定义参数值
FG = 2.1188;
fi = 2.7834;
ft = fg + fi;
h = 0.002;
k = 1864;
e = 0.7;
m = 0.001;
%初始化x
x =零(11,1);
x(1,1)= 0;
l = 0.002;
%公式1 - 确定新位置
为了我= 1:10
con1 =((ft * h) - (k *(h ^ 2)* 0.5))*(1-(e ^ 2));
x(i + 1,1)=(ft-(sqrt(ft ^ 2) - (2 * k *((con1)+((e ^ 2)*(ft * x(i,1) - (k* 0.5 *(x(i,1)^ 2)))))))))))/ k;
结尾
常量N&S初始化%
n =零(10,1);
s =零(10,1);
w =(2 * ft)/ m;
%计算常量n&s
为了我= 1:10
S(i)=(((w * l) - ((k *(l ^ 2))/ m)))*((e ^ 2-1)) - ((e ^ 2)*(x(i,1))*(w +((k *(x(x(i,1)))/ m))))));
结尾
sininv =零(10,1);
sqroot = zeros(10,1);
%POS1 =零(5000,1);
POS2 =零(5000,1);
m = 2 * ft;
时间=(0:4999)。* 0.0001;
为了我= 1:10
n(i,1)=((k *((x(i,1))^ 2)) - (2 * ft *(x(i,1))))));
Sininv(I,1)= Asin((x(i,1) - (m / 2 * k))/(sqrt(((m / 2 * k)^ 2)+(n(i,1)/ k))))));
SQROOT(I,1)= SQRT((((m /(2 * k))^ 2)+(n(i,1)/ k)));
mi = m /(2 * k);
POS1 = MI +(SQROOT(I,1))*(SIN((SQRT(k / m))。*时间)+ sininv(i,1)));
结尾

登录评论。

接受答案

斯蒂芬Cobeldick.
斯蒂芬Cobeldick. 20月12日
编辑:斯蒂芬Cobeldick. 20月12日
您的代码有两个循环,循环 j 嵌套在循环内 一世
您分配数据 POS1. 只使用索引 j ,这意味着您更换 POS1. 数据十次(每次一次 一世 迭代),只保留分配的最后一个值。这是一个小型的代码才能放置 POS1. 分配,您将看到您分配的十个值,然后替换一次 一世 迭代:
如果j == 1
DISP(POS1(1))
结尾
当我添加那个代码时,这些是您分配给的十个值 POS1(1)
0.
0.0007348123729260462
0.001229147082940499
0.001551112338708252
0.001750919824749765
0.001867711745054821
0.001932038559298222
0.001965829383562728
0.001983030898594019
0.001991628840290395
第一个九个只是被下一个值覆盖。终于存储最后一个值。该值对应于 j == 1 我== 10. ,当您手工计算时,您没有考虑到哪些。使用正确的 一世 j 值提供完全相同的值 POS1.
>> TMP =(SQROOT(1,1))*(SIN((SQRT(k / m))*时间(1,1))+ sininv(10,1)))%J == 10
TMP = -0.002629935049104
3评论

登录评论。

更多答案(1)

Cris Lapierre.
Cris Lapierre. 20月12日
编辑:Cris Lapierre. 20月12日
你的方程没有什么是错误的。但是,通过您的代码思考。嵌套的循环搞砸了你的逻辑。变量 POS1. 每次uperloop增量时都会覆盖。一旦代码完成执行,您正在检查POS1(1,1)的值。这意味着您应该使用数学检查 SQROOT(I,1) 在哪里 我= 10. (外环计数器的最后一个值)。
Si(1,1)= -1
SQROOT(10,1)= 0.0006
mi = 0.0026.
POS1(1,1)= 0.0026 + 0.0006 *( - 1)= 0.002

社区宝藏狩猎

找到Matlab Central中的宝藏,并发现社区如何帮助您!

开始狩猎!