How to code erf(z) summation series?

조회 수: 7 (최근 30일)
Henry B.
Henry B. 2021년 5월 25일
댓글: Torsten 2021년 5월 28일
  댓글 수: 2
Torsten
Torsten 2021년 5월 26일
Please insert the code you have so far.
If you did not start yet, make an attempt.
Henry B.
Henry B. 2021년 5월 27일
편집: Henry B. 2021년 5월 27일
%Final Lab
clear all
clc
z = 0;%intialize variable z
n = 0;%intialize variable n
N0 = zeros(1,21); %preallocate array for solutions of 1-erf(z)
fh = @(n,z) 1-erf(z)%create function handle for 1-erf(z)
N0(1) = n;%set n to first position in array
z = 0:0.1:2%array of z values stepping in 0.1 to 2
i = 0;%intialize index
for (i=1:20)%loop counter
while(abs(N0(i+1)) < eps(N0(i)))%loop condition
N0(i+1) = N0(i)+fh(n,z)(i)%sum series
end
end
plot(N0, z)%plot graph
z2 = [0.1 0.5 1 2]%values for erfc(z2)
errgraph=erfc(z2)%errgraph function
hold%place lines on same plot
plot(errgraph)%plot graph on same plot to see convergence.
I first attempted to use the the scientific expansion but I couldnt figure out how to implement the sigma notation to properly have n= 0 to infinity, so I tried using 1-erf(z) but it gives me a plot in the opposite direction of erfc function.

댓글을 달려면 로그인하십시오.

채택된 답변

Torsten
Torsten 2021년 5월 27일
편집: Torsten 2021년 5월 27일
function main
z = [0.1 0.5 1 2];
for i=1:numel(z)
[erfc1(i),n(i)] = myerfc1(z(i));
end
erfc_matlab = erfc(z);
X = [z.',erfc1.',n.',erfc_matlab.'];
disp(X)
end
function [erfc1,n] = myerfc1(z)
erf1 = 0.0,
term = z;
n = 0;
while abs(term) >= eps
erf1 = erf1 + term;
n = n+1;
term = term * (-1)/n * z^2 * (2*n-1)/(2*n+1);
end
erf1 = erf1 * 2/sqrt(pi);
erfc1 = 1-erf1;
end
  댓글 수: 12
Henry B.
Henry B. 2021년 5월 27일
I still dont get the what my teacher wants as result because when I expand the coded and remove the semicolons and look in the command line the n ouputs from the function dont match values for the erfc(z)
but somehow do in the output?
Torsten
Torsten 2021년 5월 28일
Include your final code to see what's going wrong.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Sulaymon Eshkabilov
Sulaymon Eshkabilov 2021년 5월 27일
Hi,
Here is the corrected code:
clearvars; clc; close all
N0 = zeros(1,21); %preallocate array for solutions of 1-erf(z)
fh = @(z) 1-erf(z); %create function handle for 1-erf(z)
z = 0:0.1:2; %array of z values stepping in 0.1 to 2
for ii=1:20%loop counter
while(abs(N0(ii+1)) < eps(N0(ii))) %loop condition
N0(ii+1) = N0(ii)+fh(z(ii+1)) ; %sum series
end
end
plot(N0, z) %plot graph
z2 = [0.1 0.5 1 2] %values for erfc(z2)
errgraph=erfc(z2) %errgraph function
hold %place lines on same plot
plot(errgraph) %plot graph on same plot to see convergence
  댓글 수: 1
Henry B.
Henry B. 2021년 5월 27일
Thanks and I was wondering about the convergence and now I feel silly because that was the first function handle I used. Are the slopes supposed to go in the opposite direction of each other?

댓글을 달려면 로그인하십시오.

Community Treasure Hunt

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

Start Hunting!

Translated by