有没有办法调整这个非线性方程组
Is there a way to adjust this system of non linear equation
最近两天我一直在解决这个问题,但没有成功。
假设我们有这个系统:
当 :
时有无限多个解
为了得到角度 Theta 的值,我使用这个公式:
我得到的值是正确的,但仅在某些点上是正确的,因为系统无法求解。
这是它的样子:
红色曲线代表 "must be" 值,蓝色曲线代表我实际得到的值。
绘制总和值后:
这是我得到的:
如您所见,它是正弦曲线,似乎影响了角度的 "must be" 值。
为了模拟这个我一直在使用这个程序:
#include <stdio.h>
#include <math.h>
int main (){
float xin =0;
float yin =0;
float zin =0;
float A =0;
float B =0;
float C =0;
float angle =0;
float outangle =0 ;
float angledeg =0;
while (angledeg <=(360*3)) {
angle = angledeg * M_PI/180;
xin = 0.11;
yin = (sin(angle) / sqrt(3)) + xin;
zin = (xin - (sin(angle +(120*M_PI/180))));
A = yin - xin;
B = xin - zin;
C = zin - yin;
outangle = atan2((A*sqrt(3)) , (B -C) ) * 180/M_PI; // 100% correct
printf ("%lf \n" , outangle);
angledeg++;
}
return 0;
}
所以我的问题是:如何使用 sum 的值来调整 "must be" 角度值(红色曲线)的结果值
更新
我不知道这是否有意义,但它有效:删除 sqrt(3):
yin = (sin(angle) / sqrt(3)) + xin;
我真的不明白,但它工作正常吗?知道为什么吗?
你可以通过考虑
来大大简化情况
sin(t)+sin(t+120°)+sin(t+240°)=0
就是说单位圆上任意等边三角形的(重)心为原点
因此
sin(t)/sqrt(3)+sin(t+120°)+sin(t+240°)=sin(t)*(1/sqrt(3)-1)
因此,使系统可解的 t=theta
的唯一值是 t=0°
和 t=180°
。
计算中
y=x+sin(t)/sqrt(3); z=x-sin(t+120°)
你为 C
创造价值
z-y = - sin(t+120°) - sin(t)/sqrt(3)
因此
B-C = 2*sin(t+120°) + sin(t)/sqrt(3)
= -sin(t) + sqrt(3)*cos(t) + sin(t)/sqrt(3)
在某种期望中,您只期望中间项,这对于 sin(t)=0
也是如此,同样对于 t=0°
或 t=180°
。
最近两天我一直在解决这个问题,但没有成功。
假设我们有这个系统:
当 :
时有无限多个解为了得到角度 Theta 的值,我使用这个公式:
我得到的值是正确的,但仅在某些点上是正确的,因为系统无法求解。 这是它的样子:
红色曲线代表 "must be" 值,蓝色曲线代表我实际得到的值。
绘制总和值后:
这是我得到的:
为了模拟这个我一直在使用这个程序:
#include <stdio.h>
#include <math.h>
int main (){
float xin =0;
float yin =0;
float zin =0;
float A =0;
float B =0;
float C =0;
float angle =0;
float outangle =0 ;
float angledeg =0;
while (angledeg <=(360*3)) {
angle = angledeg * M_PI/180;
xin = 0.11;
yin = (sin(angle) / sqrt(3)) + xin;
zin = (xin - (sin(angle +(120*M_PI/180))));
A = yin - xin;
B = xin - zin;
C = zin - yin;
outangle = atan2((A*sqrt(3)) , (B -C) ) * 180/M_PI; // 100% correct
printf ("%lf \n" , outangle);
angledeg++;
}
return 0;
}
所以我的问题是:如何使用 sum 的值来调整 "must be" 角度值(红色曲线)的结果值
更新
我不知道这是否有意义,但它有效:删除 sqrt(3):
yin = (sin(angle) / sqrt(3)) + xin;
我真的不明白,但它工作正常吗?知道为什么吗?
你可以通过考虑
来大大简化情况sin(t)+sin(t+120°)+sin(t+240°)=0
就是说单位圆上任意等边三角形的(重)心为原点
因此
sin(t)/sqrt(3)+sin(t+120°)+sin(t+240°)=sin(t)*(1/sqrt(3)-1)
因此,使系统可解的 t=theta
的唯一值是 t=0°
和 t=180°
。
计算中
y=x+sin(t)/sqrt(3); z=x-sin(t+120°)
你为 C
创造价值z-y = - sin(t+120°) - sin(t)/sqrt(3)
因此
B-C = 2*sin(t+120°) + sin(t)/sqrt(3)
= -sin(t) + sqrt(3)*cos(t) + sin(t)/sqrt(3)
在某种期望中,您只期望中间项,这对于 sin(t)=0
也是如此,同样对于 t=0°
或 t=180°
。