fsolve результаты Python не совпадают с MATLAB - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь повторить код MATLAB с Python, и как часть этого мне нужно решить нелинейные уравнения.

Изначально я пытался использовать метод fsolve, и мои результаты не совпадают с результатами MATLAB. Позже я попытался использовать optimize.root, но мои результаты не совпадают с MATLAB.

Я хотел бы знать, как оптимизировать результаты в Python. Это мой код:

def fun(x,A,theta_1,theta_2,depth,dh,g_e,incl):
    F=np.zeros(shape=(2))
    F[0]=x[0]*np.exp(t_1*depth)+x[1]*np.exp(t_2*depth*math.cos(math.radians(incl)))+g_e*math.cos(math.radians(incl))
    F[1]=(((1+t_1/A)*x[1]*np.exp(t_1*depth))+((1+t_2/A)*x[1]*np.exp(t_2*depth))+(g_e*dh*math.cos(math.radians(incl))))

    return F


n=10

depth=2000
dx = depth/0.3048 
t_1= 0.001063321803317305 
t_2=-0.000485917956755497
incl_1=np.zeros(30)
incl_2=np.linspace(0,30,30)
incl_3=np.linspace(30,80,40)
incl_main=[*incl_1,*incl_2,*incl_3]
g=0.025

A=0.0008948453688318264
deltah=depth/n
mn=np.zeros(shape=(n,2))
x0=np.array([0,0])
for i in range(n-1,0,-1):
   mn[i]=(optimize.fsolve (fun,x0,(A,t_1,t_2,depth,deltah,g,incl_main[i])))

print(mn)

MATLAB results

Python results

function F=root2d(x,A,theta_1,theta_2,depth,dh,g_e,incl)

F=[x(1)*exp(theta_1*depth)+x(2)*exp(theta_2*depth)+g_e*cosd(incl)*dh;
  (1+theta_1/A)*x(1)*exp(theta_1*depth)+ 
   (1+theta_2/A)*x(2)*exp(theta_2*depth)+g_e*dh*cosd(incl)];

Здесь Функция должна быть сохранена с именем root2d

n=10;
depth=2000;
deltah=depth/n;
depth = depth/0.3048 ;
c0 = [0,0];
A=0.0008948453688318264
incl=[zeros(1,30) linspace(0,30,30)  linspace(30,80,40)];
a=zeros(n,2);
theta_1= 0.001063321803317305 ;
theta_2=-0.000485917956755497;
g_e=0.025

for i=n:-1:1
 a(i,:) =fsolve(@(x)root2d(x,A,theta_1,theta_2,depth,deltah,g_e,incl(i)),c0);

end    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...