2 views (last 30 days)

Show older comments

I am new to Matlab.

I wanted to find the Torque given as T= A*I*cos(theta) - B*I.^2*sin(2*thetha)

with A= 0.01 B= 0.001; I varies from 0 to 100 and thetha from 0 to 45.

I want to find the maximum T (Torque) and plot I vs Theta

This my basic syntax:

A=0.01; %Wb is the unit of A

B=0.001; %H is the unit of Inductance

I=(0:10:100);

theta=(0:1:45);

T=A*I.Cos(theta)-B*I.^2*Sin(2*theta);

Walter Roberson
on 19 Jul 2021

A=0.01; %Wb is the unit of A

B=0.001; %H is the unit of Inductance

I =(0:10:100); %row!

theta=(0:1:45).'; %column!

T = A .* I .* cosd(theta) - B .* I.^2 .* sind(2*theta);

surf(I, theta, T)

xlabel('I'); ylabel('theta'); zlabel('Torque')

[maxT, idx] = max(T(:));

[r,c] = ind2sub(size(T), idx);

best_theta = theta(r);

best_I = I(c);

fprintf('best torque is %g at theta = %g and I = %g\n', maxT, best_theta, best_I);

Walter Roberson
on 20 Jul 2021

Yes, using meshgrid. You can avoid using ind2sub() -- but you still end up using linear indexing.

A=0.01; %Wb is the unit of A

B=0.001; %H is the unit of Inductance

I_vec =(0:10:100);

theta_vec = (0:1:45);

[I, theta] = meshgrid(I_vec, theta_vec);

T = A .* I .* cosd(theta) - B .* I.^2 .* sind(2*theta);

surf(I, theta, T)

xlabel('I'); ylabel('theta'); zlabel('Torque')

[maxT, idx] = max(T(:));

best_theta = theta(idx);

best_I = I(idx);

fprintf('best torque is %g at theta = %g and I = %g\n', maxT, best_theta, best_I);

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

Start Hunting!