Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python上的fsolve(将matlab代码转换为python代码)_Python - Fatal编程技术网

python上的fsolve(将matlab代码转换为python代码)

python上的fsolve(将matlab代码转换为python代码),python,Python,我在matlab上有一个程序,但我想用python进行转换,我的matlab代码是: function [f]=equation1(x) %options = optimoptions('fsolve','TolFun',1.1e-20,'TolX',1.1e-20,'maxIter',Inf,'MaxFunEvals',Inf); c = 330 ;%speed of sound meters per second % unknown variable : % r1 => x(1)

我在matlab上有一个程序,但我想用python进行转换,我的matlab代码是:

function [f]=equation1(x)
%options = optimoptions('fsolve','TolFun',1.1e-20,'TolX',1.1e-20,'maxIter',Inf,'MaxFunEvals',Inf);
c = 330 ;%speed of sound meters per second 
% unknown variable : 
% r1 => x(1) 
% theta => x(2)

time2 = 0.455; % Microphone 1 to Microphone 2 time delay
time3 = 0.606; % Microphone 1 to Microphone 3 time delay
% gives : 
r2 = 150 %time2*c;
r3 = 200 %time3*c; 

r4 = 499.1; % Distance from Microphone 2 to Microphone 3
r5 = 1267.9;% Distance from Microphone 1 to Microphone 3

phi = 16.177; % Angle between Microphone 1 and Microphone 2 measured from Microphone 3
 %
f(1)= (x(1) + r2)^2- (x(1)+r3)^2 -r4^2 +2*(x(1)+r3)*r4*cosd(x(2));
f(2)= x(1)^2  - (x(1)+r3)^2  - r5^2 + 2*(x(1)+r3)*r5*cosd(x(2)-phi);
我用[x,feval]=fsolve(@equation1[10010])来显示此代码;他返回正确的值(1620.7076.4) 但是在python上,我已经制作了这个程序

from scipy.optimize import fsolve
import math

def  cosd(x):
    return math.cos(x * math.pi / 180);


def equations(p):
    time2 = 0.455 # Microphone 1 to Microphone 2 time delay
    time3 = 0.606 # Microphone 1 to Microphone 3 time delay
    # gives : 
    r2 = 150. #time2*c;
    r3 = 200. #time3*c; 

    r4 = 499.1  # Distance from Microphone 2 to Microphone 3
    r5 = 1267.9 # Distance from Microphone 1 to Microphone 3

    phi = 16.177 # Angle between Microphone 1 and Microphone 2 measured from Microphone 3
        r1, theta = p
    f1 = (r1 + r2)**2. -(r1+r3)**2 -r4**2 +2*(r1+r3)*r4*(cosd(theta))
    f2 = r1**2  - (r1+r3)**2  - r5**2 + 2*(theta+r3)*r5*(cosd(theta-phi))
        return (f1,f2)

x, y =  fsolve(equations, (1000.0, 20.0), xtol=1e-06, maxfev=10000000)

print x,y, equations((x, y))
但当我运行时,我有一个错误值:

迭代没有取得好的进展,正如 改进了过去五次雅可比评估。 warning.warn(msg,RuntimeWarning) (-167792.6884194007,-1096453.7938717711)

有人说为什么它不能在python上工作吗


EDIT=>我更改python代码以解决程度上的问题。但是我没有很好的值,(python返回-4263.77780373-272.257364385,它与matlab值相差很远)

我认为问题在于这个减法:

(theta-phi)

在matlab中,你是在减去度数,但在python中,θ是以德格里斯表示的,而φ是以弧度表示的。

谢谢你,在你的帮助下,我发现了我的错误

  • 对于余弦,我用这个函数求解:

    def cosd(x): 返回math.cos(x*math.pi/180)

    • 另一个我用θ反转r1
f2=r1**2-(r1+r3)**2-(r5)**2+2*(r1+r3)r5(余弦(θφ))