Converting Python to Matlab

Spent a few hours on trying to figure out why the outputs are different, no luck. Python and Matlab are in a txt file along with their outputs.
Suggestions on what I should be looking at to resolve the issue?

2 个评论

We do not have the data or NumPanels to test with.
I figured it out.

请先登录,再进行评论。

 采纳的回答

Andrei Bobrov
Andrei Bobrov 2017-10-24
编辑:Andrei Bobrov 2017-10-24
Small typo in MATLAB code in nu2
nu2 = atan2(-(xc(k)-xp(n))*sin(theta(k))+(yc(k)-yp(n))*cos(theta(n))+(xp(n+1)-xp(n))*sin(theta(n))-(yp(n+1)-yp(n))*cos(theta(n)),(xc(k)-xp(n))*cos(theta(n))+(yc(k)-yp(n))*sin(theta(n))-(xp(n+1)-xp(n))*...
cos(theta(n))-(yp(n+1)-yp(n))*sin(theta(n))); % fixed!

3 个评论

I figured it out. I don't need the multiplication, '\' in Python means '...' in Matlab. The nu2 = atan2(x1, x2) similar to this line of code in my script. atan2(yp(k+1)-yp(k), xp(k+1)-xp(k)).
Stop Zach!
How?
cos(theta(n)-(yp(n+1)-yp(n))*sin(theta(n)))
or
cos(theta(n))-(yp(n+1)-yp(n))*sin(theta(n))

请先登录,再进行评论。

更多回答(2 个)

How would I insert zeros in the diagonal line of these 128 x 128 matrices?
nSource = -(sin(theta-transpose(theta)))*ups + (cos(theta-transpose(theta)))*wps;
ftSource = cos(theta-transpose(theta))*ups + sin(theta-transpose(theta))*wps;
nVortex = sin(theta-transpose(theta))*upv + cos(theta-transpose(theta))*wpv;
tVortex = cos(theta-transpose(theta))*upv + sin(theta-transpose(theta))*wpv;

15 个评论

For the special case of square matrices, often the easiest way is
M - diag(diag(M))
For other matrices,
tril(M,1) + triu(M,1)
What if I wanted to insert a number, other than zero?
Just in case you have unsigned integers or the case where the existing value is so different from the new value that you have to worry about loss of precision:
Square matrix:
M(1:size(M,1)+1:end) = NewNumber;
Non-square matrix:
shorter = min(size(M,1),size(M,2));
lastidx = size(M,1)*(shorter-1)+shorter;
M(1:size(M,1)+1:lastidx) = NewNumber;
M = M = nSource = 128 x 128 ?
Is the M inside of the size() the vector that lays in the diag of nSource?
M is the array whose diagonal is to be set. For example,
nSource(1:size(nSource,1)+1:end) = NewNumber;
if nSource is square.
Actually this seem to have worked for my situation.
ups(logical(eye(size(ups)))) = 0;
wps(logical(eye(size(wps)))) = 0.5;
Can you please help me with the Matlab equivalent?
A=np.zeros((numPanels+1,numPanels+1))
A[:numPanels,:numPanels]=nSource
I just need the equivalent to this code.
A[:numPanels,-1]=np.sum(nVortex,axis=1)
A[:numPanels,:numPanels]=nSource
would be
A(1:end-1, 1:end-1) = nSource;
I am not certain about
A[:numPanels,-1]=np.sum(nVortex,axis=1)
but I suspect
A(1:end-1, end) = sum(nVortex, 2);
It worked! Thank you.
A[-1,:numPanels]=tSource[0,:]+tSource[-1,:]
Here is what I have.
A(end, 1:end) = tSource(1, :) + tSource(end, :);
Error:
Subscripted assignment dimension mismatch.
Error in ssPanelMethod (line 112) A(end, 1:end) = tSource(1, :) + tSource(end, :);
A(end, 1:end-1) = tSource(1, :) + tSource(end, :);
I really want to understand these little operations, rather than constantly asking for help here...
Python code
normVelFoil=np.dot(nSource,x[:-1])+np.dot(nVortex,x[-1]*np.ones((num
Panels,1)))+normU
tangVelFoil=np.dot(tSource,x[:-1])+np.dot(tVortex,x[-1]*np.ones((numPanels,1)))+tangU
Matlab code
normVelFoil = dot(nSource, x(1:end, 1:end-1)) + dot(nVortex, x(1:end, 1:end-1) * ones(numPanels, 1)) + normU;
tangVelFoil = dot(tSource, x(1:end, 1:end-1)) + dot(tVortex, x(1:emd, 1:end-1) * ones(numPanels, 1)) + tangU;
tSource, tVortex are 128 x 128, while x is a 129 x 1.
I changed dot to mtimes() or I could use .*
I compare the first dot to second dot of python and everything looks to be lining up. When I compare the normVelFoil outputs they don't line up.
Here is what I changed..
normVelFoil = mtimes(nSource, x(1:end-1, 1)) + mtimes(nVortex, x(end)*ones(numPanels, 1)) + normU;
I have come to a conclusion the outputs are the same. They are both extremely small values, practically zero.

请先登录,再进行评论。

ASHOK KUMAR MEENA
ASHOK KUMAR MEENA 2022-4-18

0 个投票

def Lagrange(x, y, n, xx):
sum = 0
for i in range(0, n + 1):
product = y[i]
for j in range(0, n + 1):
if (i != j):
product = product * (xx - x[j]) / (x[i] - x[j])
sum += product
return sum
def Trapezoidal(h, n, f):
sum = f[0]
for i in range (1, n):
sum = sum + 2 * f[i]
sum = sum + f[n]
ans = h * sum / 2
return ans

类别

帮助中心File Exchange 中查找有关 Call Python from MATLAB 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by