有没有办法调整这个非线性方程组

时间:2015-04-12 10:33:24

标签: c math mathematical-optimization

过去两天我一直在解决这个问题但没有成功。 说我们有这个系统:     system

在以下情况下有无限多种解决方案:

condition

获取角度Theta的值,我使用这个公式:

solution

我得到的价值是正确的,但只在某些方面,因为系统是不可解决的。 以下是它的样子:

anlge

红色曲线代表"必须是"价值和蓝色代表我实际得到的。

在绘制总和的值之后:

condition

这是我得到的: error 因为你可以看到它的正弦曲线,这似乎影响了#34;必须是"角度的值。

模拟这个我一直在使用这个程序:

      #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的值来调整&#34的结果值;必须是&#34;角度值(红色曲线)

更新

我不知道这是否有意义但是有效:删除sqrt(3):

yin = (sin(angle) / sqrt(3))  + xin;

我真的不明白,但它运作正常吗?任何想法为什么?

1 个答案:

答案 0 :(得分:3)

您可以通过考虑

来大大简化这种情况
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)=0t=0°的中期,t=180°也是如此。