How to calculate u for every alpha?

11 views (last 30 days)
Luluhihi2021
Luluhihi2021 on 22 Nov 2022
Commented: Torsten on 22 Nov 2022
Hi Guys,
In my project i have to Write a script that solves the heat conduction equation only for linear basis
functions with Robin boundary conditions. This time different values of α
are to be considered in a simulation. I have to determine for each α the function value
at the left and right end of the interval. Store these values in a matrix. For ¨
α = 2, 5, 10, 15, 20, for example, the matrix could look like the following.
I know how to calculate it for one alpha like alpha = 2, but i dont know how to do it with more alpha and build the matrix. With the for loop i only get the values for alpha=20... This is the code:
...
f= @(x)(0*zeros(size(x)));
alpha = [2,5,10,15,20];
%lineare Basisfunktion
[A]= assemDiffusion1D(nodes, epsilon);
b = assemRightSide1D(f,nodes, "exact");
%Robin RW
for alpha=[2,5,10,15,20]
n = length(A);
b(1)=b(1)+epsilon*alpha/400*271.15;
b(n)=b(n)+epsilon*alpha/400*ul;
A(1,1)=A(1,1)+epsilon*alpha/400;
A(n,n)=A(n,n)+epsilon*alpha/400;
ulinR= A\b;
end
T = [alpha ulinR(1) ulinR(n)]
end
  1 Comment
Torsten
Torsten on 22 Nov 2022
For this harmless question you really need to change your Username ?

Sign in to comment.

Accepted Answer

Torsten
Torsten on 22 Nov 2022
...
f= @(x)(0*zeros(size(x)));
alpha = [2,5,10,15,20];
%lineare Basisfunktion
A = assemDiffusion1D(nodes, epsilon);
b = assemRightSide1D(f,nodes, "exact");
%Robin RW
T = zeros(numel(alpha),3);
for i = 1:numel(alpha)
n = length(A);
b(1)=b(1)+epsilon*alpha(i)/400*271.15;
b(n)=b(n)+epsilon*alpha(i)/400*ul;
A(1,1)=A(1,1)+epsilon*alpha(i)/400;
A(n,n)=A(n,n)+epsilon*alpha(i)/400;
ulinR= A\b;
T(i,:) = [alpha(i),ulinR(1),ulinR(n)]
end
...
  5 Comments
Luluhihi2021
Luluhihi2021 on 22 Nov 2022
One last question for comprehension: What did you do by putting A= AA, and b = bb? Or why did you do that? Did u save it in another variable ?
Torsten
Torsten on 22 Nov 2022
Edited: Torsten on 22 Nov 2022
To save workspace, this might be a better solution:
...
f= @(x)(0*zeros(size(x)));
alpha = [2,5,10,15,20];
%lineare Basisfunktion
A = assemDiffusion1D(nodes, epsilon);
b = assemRightSide1D(f,nodes, "exact");
A11 = A(1,1);
Ann = A(n,n);
b1 = b(1);
bn = b(n);
%Robin RW
T = zeros(numel(alpha),3);
for i = 1:numel(alpha)
n = length(A);
b(1)=b1+epsilon*alpha(i)/400*271.15;
b(n)=bn+epsilon*alpha(i)/400*ul;
A(1,1)=A11+epsilon*alpha(i)/400;
A(n,n)=Ann+epsilon*alpha(i)/400;
ulinR= A\b;
T(i,:) = [alpha(i),ulinR(1),ulinR(n)]
end
A(1,1) = A11;
A(n,n) = Ann;
b(1) = b1;
b(n) = bn;
...

Sign in to comment.

More Answers (0)

Categories

Find more on Preprocessing Data in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!