Я пытаюсь повторить код 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)
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