# I have a problem. It can not run. Help me please.

1 view (last 30 days)
Chidsanucha Bunprasanrit on 25 Jan 2020
Edited: John D'Errico on 25 Jan 2020
clear all
clc
y = linspace(-5,5,100);
T0 = 303.15;
A = 0.5;
k = 7.2;
alpha = 2.96*10^-6;
P = 200;
v = 1;
x1 = 0;
x2 = -0.002;
x3 = -0.0035;
%r1 = ((x1)^2+y^2)^0.5;
%r2 = ((x2)^2+y^2)^0.5;
%r3 = ((x3)^2+y^2)^0.5;
T1 = (T0)+((A * P /(2*pi*k*(((x1)^2+y^2)^0.5)))*exp((-v)*((((x1)^2+y^2)^0.5)+(x1)))/(2*alpha));
T2 = (T0)+((A * P /(2*pi*k*(((x2)^2+y^2)^0.5) ))*exp((-v)*((((x2)^2+y^2)^0.5)+(x2)))/(2*alpha));
T3 = (T0)+((A * P /(2*pi*k*(((x3)^2+y^2)^0.5)))*exp((-v)*((((x3)^2+y^2)^0.5)+(x3)))/(2*alpha));
figure
plot(y,T1,'blue')
hold on
plot(y,T2,'red')
hold on
plot(y,T3,'orange')
axis([-0.0005 0.0005 0 2000])
legend('y(m)','Temperature(K)')

John D'Errico on 25 Jan 2020
Edited: John D'Errico on 25 Jan 2020
When you say only that something does not run, then tell people what was the error message. Show the COMPLETE error message. Thus everything in red. In this case, the answer is obvious, and the first mistake most new users of MATLAB make, when they fail to have read the getting started tutorials.
y is a vector. What happens when you try this in matlab?
y = 1:5;
y^2
Error using ^ (line 51)
Incorrect dimensions for raising a matrix to a power. Check that the matrix is square and the power is a scalar. To perform elementwise matrix
powers, use '.^'.
What did it tell me to do? It told me that it cannot raise y to a power, and that I should probably consider using .^ instead. I want to compute the element-wise powers of each element in the vector. So I need to use the .^ operator.
y.^2
ans =
1 4 9 16 25
Likewise, when I wish to multiply or divide each element of a vector with another of the same size, I need to use the .* and ./ operators. If you had read the manual, it would have discussed this.
So now look at the line:
T1 = (T0)+((A * P /(2*pi*k*(((x1)^2+y^2)^0.5)))*exp((-v)*((((x1)^2+y^2)^0.5)+(x1)))/(2*alpha));
Did you use the .^ and .* and ./ operators in there as needed?
You can get away with operations like 2*y, as one of the operands is a scalar. MATLAB recognizes that a scalar multiply should be extended to every element of the other operand. Be careful however, as this does not extend to the ^ and / operators.
Finally, there is no problem with addition and subtraction of vectors and arrays. As long as they are of conforming size and shape, MATLAB needs to do nothing special. So there is no such thing as a .+ operator in MATLAB.

suleiman abdullahi on 25 Jan 2020
you should use the elementwise operation e.g [.* and .^]. like this below
T1 = (T0)+((A .* P ./(2.*pi.*k.*(((x1).^2 + y.^2).^0.5))).*exp((-v)*((((x1).^2 + y.^2).^0.5)+(x1)))./(2.*alpha));