Quantcast
Channel: MATLAB Central Newsreader - tag:"real option"
Viewing all articles
Browse latest Browse all 10

Re: meshgrid 3d 6000*6000 matrix can't be shown. is the problem in my hardware or my code?

$
0
0
"Bayu Firgiawan" wrote in message <lmkpi8$ha9$1@newscl01ah.mathworks.com>...
> "Steven Lord" <Steven_Lord@mathworks.com> wrote in message <lmkm7h$7jl$1@newscl01ah.mathworks.com>...
> > You've posted a LOT of code (though not all of it, I suspect) but we can't
> > run it because 1) it depends on what you type at various INPUT statements
> > and 2) it depends on the contents of variables you haven't showed us.
> >
> > Simplify this down to a SMALL section of code and instructions that people
> > can execute and with which you can reproduce the behavior. Post that code
> > and instructions to the group (please do NOT send them to me directly.) Then
> > readers of the group can try it out and see if they can reproduce the
> > behavior you're describing.
> >
> > As for the performance, I've got two ideas.
> >
> > 1) You're displaying a LOT of text to the Command Window with FPRINTF. Try
> > commenting those out or guarding them by IF statements controlled by a
> > variable you define at the top of your code, like:
> >
> > debugging = false;
> > if debugging
> > fprintf(...
> > end
> >
> > That way the text only displays when you turn debugging on.
> >
> > 2) You have a LOT of calls to HOLD throughout your code. My guess is that
> > you keep on adding line after line after line in the same axes, which will
> > cause rendering to slow down as the renderer has to figure out what to
> > display where and what's concealed "underneath" other graphics objects.
> >
> > *snip*
> >
> > --
> > Steve Lord
> > slord@mathworks.com
> > To contact Technical Support use the Contact Us link on
> > http://www.mathworks.com
>




Here are my entire code

repeat=1;
while repeat==1
close all
clc;
clear;
warning off all
format longG
%===================
while length(filename)<2
    disp('Input Project file price');
    start=input('[Press ENTER to continou]');
    filename=uigetfile('.xlsx');
    if length(filename)<2
        disp('No file loaded. try to load it please.');
        disp('--------------------------')
    else
        filepath=strcat(pwd,'/',filename);
        disp('File loaded!');
        fprintf(strcat('[',pwd,'/',filename,']\n'));
    end
end
%=============================|
%input range mulai data
inputcelltext='input cell range';
cellrange1text=' (first cell) =';
fprintf(strcat(inputcelltext,cellrange1text));
cellrange1='';
while length(cellrange1)<2
    cellrange1=input(' ','s');
    if (length(cellrange1)<2)
       fprintf('\b\b');
    end
    cellrange1split=strsplit(cellrange1,':');
    if length(cellrange1split)>1
        fprintf('\b\b');
        for bscr=1:length(cellrange1) %backspacecellrange
            fprintf('\b');
        end
        cellrange1='';
    end
end
for bsic=1:(length(cellrange1text)+length(cellrange1)+1) %backspaceinputcell
    fprintf('\b');
end
%=============================|
%input range akhir data
cellrange2text='(second cell) = ';
fprintf(cellrange2text);
fprintf(strcat(cellrange1,':'));
cellrange2='';
while length(cellrange2)<2
    cellrange2=input('','s');
    if (length(cellrange2)<2)
       fprintf('\b');
    end
end
%=============================|
%read date of data
cellrange=strcat(cellrange1,':',cellrange2);
V=xlsread(filepath,1,cellrange);
dtrange1=strsplit(cellrange1,cellrange1(1));
dtrange2=strsplit(cellrange2,cellrange2(1));
dt=xlsread(filepath,1,strcat('A',dtrange1{2},':A',dtrange2{2}));
clc;
disp('Crude oil prices (USD)')
fprintf(strcat(' periode [',datestr((dt((str2num(dtrange2{2})-1),1)+datenum('30-Dec-1899')),'dd/mm/yyyy'),'-',datestr((dt((str2num(dtrange1{2})-1),1)+datenum('30-Dec-1899')),'dd/mm/yyyy'),'] \n'))
disp('---------------------------------------------')
disp(V)
count=length(V);
%=============================|
%Year
t0=input('Publish Year = '); %Tahun awal diterbitkan
fprintf('=======================\n')
vart0=0;
while vart0==0
    Te=input('Excecution Year = '); %Tahun Proyek dieksekusi
    fprintf('======================\n')
    if Te<(t0+1)
        disp('Please input bigger year than Publish Year!');
    else
        vart0=1;
    end
end
T=Te-t0;
tmin=0;
%=============================|
disp('Which Scenario?');
disp('1. Varying Standar Deviation (sigma).');
disp('2. Varying Expected Return (miu).');
disp('3. Varying Strike Price (D).');
disp('');
%=============================|
scenario=0;
while scenario<1 || scenario>3
    scenario = input('[1-3] = ');
    fprintf('========================\n')
    if scenario<1 || scenario>3
        disp('Input a scenario number!');
    end
end

trial=0;
while trial<1
    trial=input('How many number of trial ? = ');
    if trial<1
        disp('too small, \nrepeat again!');
    end
end
%===============|
%Pencarian Return Data V
for i=1:count-1
    returnV(i,1)=(V(i+1)-V((i)))/(V(i)); %Estimasi RETURN data V
end
%==============|
switch scenario
    case 1
        D(1:trial)=85;
        miu(1:trial)=mean(returnV);
        for tr=1:trial
            fprintf('Input Sigma trial-%d = ',tr);
            sig(tr)=input('');
            sig2(tr)=sig(tr)^2;
            sce(tr,scenario)=sig(tr);
        end
        fprintf('=============\n')
        xlabels='Standar Deviasi (sigma)';
        scetype(scenario)=cellstr(' Standar Deviasi');
    case 2
        D(1:trial)=85;
        for tr=1:trial
            fprintf('Input miu trial-%d = ',tr);
            miu(tr)=input('');
            sce(tr,scenario)=miu(tr);
        end
        fprintf('=====================\n')
        sig2(1:trial)=var(returnV);
        sig(1:trial)=sqrt(sig2(1));
        xlabels='Expected Return (miu)';
        scetype(scenario)=cellstr(' Expected Return');
    case 3
        for tr=1:trial
            fprintf('Input strike price trial-%d = ',tr);
            D(tr)=input('');
            sce(tr,scenario)=D(tr);
        end
        fprintf('======================\n')
        miu(1:trial)=mean(returnV);
        sig2(1:trial)=var(returnV);
        sig(1:trial)=sqrt(sig2(1));
        xlabels='Strike Price (D)';
        scetype(scenario)=cellstr('Strike Price');
end

for tr=1:trial
%=============================|
imax=T*1000; %jumlah subselang untuk V %DeltaV
jmax=T*1000; %jumlah subselang untuk (T)dibuatnya selama harian %DeltaT
%=============================|
r=miu(tr);
d=0; %Besar nilai dividen
%=============================|
%Pendefinisian nilai maksimum dan minimum dari rentang harga
Vmaks=max(V); %nilai maskimum dari data V
Vmin=min(V); %nilai minimum untuk data V
PMax=2*(Vmaks); %nilai prediksi maksimum dari data harga
%=============================|
%Persiapan kalkulasi menggunkan Metode Numerik Finite Different
p=(PMax-Vmin)/(imax); %panjang selang posisi untuk V
w=(T-tmin)/(jmax); %panjang selang posisi untuk tau
VV=Vmin:p:PMax; %vektor untuk data V interior
maxwa=max(VV-D(tr),0);
F{tr}=maxwa(1:size(maxwa,2))'; %syarat awal, nilai saat maturity
F2{tr}=F{tr};
F3{tr}=F{tr};

%=============================|
%pendefinisian t dan tau
for i=1:jmax+1
    t(i)=(i-1)*w;
    tau(i)=T-t(i);
end
%=============================|
D1=diag(1:1:(imax-1));
D2=D1.^2;
T1=diag(ones(imax-2,1),1)-diag(ones(imax-2,1),-1);
T2=-2*eye(imax-1,imax-1)+diag(ones(imax-2,1),1)+diag(ones(imax-2,1),-1);

%=============================|
% PENDEFINISIAN MATRIK DALAM METODE
% FTCS_BTCS_CRANK_NICOLSON
%=============================|
rd=r-d;
        A{tr}=((1-(r*w))*eye(imax-1))+(0.5*w*sig2(tr)*D2*T2)+(0.5*rd*w*D1*T1); %Matriks untuk FTCS
        g{tr}=[0.5*w*(sig2(tr)-rd)*(max(Vmin-(D(tr)*exp(-r*tau)),0)) zeros(1,(imax-3)) 0.5*w*(imax-1)*(sig2(tr)*(imax-1)+rd)*max(PMax-(D(tr)*exp(-r*tau)),0)]'; %Matriks untuk menyesuaikan dengan Matriks FTCS %zeros imax-3 disesuaikan dengan F dan A
        B{tr}=((1+(r*w))*eye(imax-1))+(0.5*w*sig2(tr)*D2*T2)+(0.5*rd*w*D1*T1); %Matriks untuk BTCS
        u{tr}=[0.5*w*(sig2(tr)-rd)*(max(Vmin-(D(tr)*exp(-r*tau)),0)) zeros(1,(imax-3)) 0.5*w*(imax-1)*(sig2(tr)*(imax-1)+rd)*max(PMax-(D(tr)*exp(-r*tau)),0)]'; %Matriks untuk menyesuaikan dengan Matriks BTCS %zeros imax-3 disesuaikan dengan F dan A
        invB{tr}=inv(B{tr});
        invIB{tr}=inv(eye(imax-1)+B{tr});
%=============================|
% PERHITUNGAN ITERASI MENGGUNAKAN METODE
% FTCS_BTCS_CRANK NICOLSON
% MENERAPKAN BOUNDARY AMERICAN OPTION
%=============================|

%definisi Awal batas awal dan batas akhir MatrixIterF
        MatrixIterF{tr,1}=NaN(imax+1,jmax+1);
        MatrixIterF{tr,1}(1,:)=max(Vmin-(D(tr)*exp((-r)*tau)),0); %syarat batas bawah
        MatrixIterF{tr,1}(imax+1,:)=max(PMax-(D(tr)*exp(-r*tau)),0); %syarat batas atas
        MatrixIterF{tr,1}(:,1)=F{tr}; %syarat awal
%definisi Awal batas awal dan batas akhir MatrixIterF
        MatrixIterF{tr,2}=NaN(imax-1,jmax-1);
        MatrixIterF{tr,2}(1,:)=max(Vmin-(D(tr)*exp((-r)*tau)),0); %syarat batas bawah
        MatrixIterF{tr,2}(imax+1,:)=max(PMax-(D(tr)*exp(-r*tau)),0); %syarat batas atas
        MatrixIterF{tr,2}(:,1)=F{tr}; %syarat awal
%definisi Awal batas awal dan batas akhir MatrixIterF
        MatrixIterF{tr,3}=NaN(imax-1,jmax-1);
        MatrixIterF{tr,3}(1,:)=max(Vmin-(D(tr)*exp((-r)*tau)),0); %syarat batas bawah
        MatrixIterF{tr,3}(imax+1,:)=max(PMax-(D(tr)*exp(-r*tau)),0); %syarat batas atas
        MatrixIterF{tr,3}(:,1)=F{tr}; %syarat awal
for j=2:jmax+1
        F{tr}=A{tr}*F{tr}+g{tr}; %menghitung F menggunakan metode FTCS
        F2{tr}=invB{tr}*(F2{tr}+u{tr}); %menghitung F menggunakan metode BTCS
        F3{tr}=invIB{tr}*((A{tr}+eye(imax-1))*F3{tr}+g{tr}+u{tr}); %menghitung F menggunakan metode Crank-Nicolson
or i=1:imax
        if F{tr}(i)>=(maxwa(i))'
            MatrixIterF{tr,1}(i,j)=F{tr}(i);
        else
            MatrixIterF{tr,1}(i,j)=(maxwa(i))';
        end
        
        if F2{tr}(i)>=(maxwa(i))'
            MatrixIterF{tr,2}(i,j)=F2{tr}(i);
        else
            MatrixIterF{tr,2}(i,j)=(maxwa(i))';
        end
        
        if F3{tr}(i)>=(maxwa(i))'
            MatrixIterF{tr,3}(i,j)=F3{tr}(i);
        else
            MatrixIterF{tr,3}(i,j)=(maxwa(i))';
        end
    end
    F{tr}=MatrixIterF{tr,1}(1:imax+1,j);
    F2{tr}=MatrixIterF{tr,2}(1:imax+1,j);
    F3{tr}=MatrixIterF{tr,3}(1:imax+1,j);
end
%=============================|
% PERHITUNGAN WAITING VALUE
% SEBAGAI HARGA OPSI
%=============================|
%Rumus = F-(max(V-D),0)
MatrixIterWait{tr,1}=NaN(imax+1,jmax+1);
MatrixIterWait{tr,2}=NaN(imax+1,jmax+1);
MatrixIterWait{tr,3}=NaN(imax+1,jmax+1);
for j=1:jmax+1
    for i=1:imax+1
        MatrixIterWait{tr,1}(i,j)=MatrixIterF{tr,1}(i,j)-(maxwa(i))'; %menghitung Waiting Value menggunakan metode FTCS
        MatrixIterWait{tr,2}(i,j)=MatrixIterF{tr,2}(i,j)-(maxwa(i))'; %menghitung Waiting Value menggunakan metode BTCS
        MatrixIterWait{tr,3}(i,j)=MatrixIterF{tr,3}(i,j)-(maxwa(i))'; %menghitung Waiting Value menggunakan metode C-N
    end
end

if tr<2
%=============================|
%Penyimpanan Nama metode ke dalam array
    methodnames=[cellstr(' FTCS');cellstr(' BTCS');cellstr(' Crank-Nicolson')];
%=============================|
%pilihan penamipilan plot atau tidak
    disp('Show plot?');
    disp('0 -> NO.');
    disp('1 -> YES.');
    varplot=2;
    while varplot<0 || varplot>1
        varplot=input('[0-1] = ');
        if varplot<0 || varplot>1
            disp('INPUT THE NUMBER CORRECTLY !');
        end
    end
end
%=============================|
%pendefinisian color yang akan digunakan
colors=['c';'m';'k';'y';'b';'g';'r'];
%=============================|
  switch varplot
        case 1
            disp('show all?');
            disp('0 -> NO, hanya beberapa.');
            disp('1 -> YES.');
            varplot1=2;
            while varplot1<0 || varplot1>1
                varplot1=input('[0-1] = ');
                if varplot1<0 || varplot1>1
                    disp('pls Input correctly !');
                end
                fprintf('==================================\n')
            end
  %=============================|
    switch varplot1
                case 1
                    trpl=trial;
                    trppl(1:trial)=1:trial;
                otherwise
                    fprintf('how many that will be plotted = ');
                    trplot=0;
                    while trplot<1
                        trplot=input('');
                        if trplot<1
                            disp('pls input corrctly!');
                        end
                        fprintf('================================\n')
                    end
%=============================|
  %pemilihan uji ke- yang di plotkan
                    for trp=1:trplot
                        trpp(trp)=0;
                        while trpp(trp)<1
                            fprintf('trial no-%d that will be plotted = ',trp);
                            trpp(trp)=input('');
                            if trpp(trp)<1
                                disp('input correctly!');
                            end
                        end
                        fprintf('===========================\n')
                    end
                    trpl=trplot;
                    trppl=trpp;
            end
%=============================|
%=============================|
  % PLOTTING
% WAITING VALUE
%=============================|
  %penentuan jumlah yang akan di plotkan
            for tr=1:trpl
                if tr<2
                    fprintf('====================================================\n')
                    trialwv=0;
                    while trialwv<1
                        trialwv=input('number of price of \nWaiting Value that will be plotted = ');
                        if trialwv<1
                            disp('too small, \nrepeat!');
                        end
                     end
%=============================|
  %pada harga berapa yang akan di plotkan (akan disesuaikan dari partisi ke-)
                    for wv=1:trialwv
                        inputwv(wv)=Vmin-1;
                        while inputwv(wv)<Vmin || inputwv(wv)>PMax
                            fprintf('price number-%d will be plotted [USD%0.2f - USD%0.2f] = ',wv,Vmin,PMax);
                            inputwv(wv)=input('');
                        end
                        nilaiwv(wv)=cellstr(sprintf('Harga Opsi pada harga USD%d',inputwv(wv)));
                     end
                     fprintf('====================================================\n')
                end
%=============================|
  %mulai plot figure undeveloped Value
                for j=1:3
                        figure('Name',sprintf('Figure %d Trial %d',j,trppl(tr)),'NumberTitle','off')
                        set(gcf,'renderer','zbuffer');
                        [X Y]=meshgrid(VV,0:w:T);
                        Z=MatrixIterF{trppl(tr),j};
                        surf(X,Y,Z);
                        switch j
                            case 1
                                colormap(hot)
                            case 2
                                colormap(summer)
                            case 3
                                colormap(winter)
                        end
                        colorbar
                        title(strcat('Plot Undeveloped Value Project menggunakan metode ',methodnames(j),sprintf(' uji ke-%d.',trppl(tr))))
                        xlabel('Harga Minyak Mentah di Pasar (VV)')
                        ylabel('t=0..T')
                        zlabel('Hasil Undeveloped Value Proyek (F)')
                        grid on
                end
%=============================|
  %Mulai plot figure Waiting value
                for j=4:6
                    figure('Name',sprintf('Figure %d Trial %d',j,trppl(tr)),'NumberTitle','off')
                    set(gcf,'renderer','zbuffer');
                    title(strcat('Plot harga opsi menggunakan metode ',methodnames(j-3),sprintf(' uji ke-%d.',trppl(tr))))
                    xlabel('t=0..T')
                    ylabel('Harga Opsi (Waiting Value) Project')
                    hold on
                    for wv=1:trialwv
                        if (wv>length(colors))
                            if (mod(wv,length(colors))==1)
                                x=1;
                            else
                                x=x+1;
                            end
                        else
                            x=wv;
                        end
                        wvi=(round(((inputwv(wv))-Vmin)/p))+1;
                        plot(0:w:T,MatrixIterWait{trppl(tr),j-3}(wvi,:),colors(x));
                    end
                    legend(nilaiwv,'Location','NorthWest');
                    hold off
                    grid on
                end
%=============================|
  % PLOTTING t TERTENTU
% Nilai F(V,t) grafiks Tahunan
%=============================|
  % Untuk membuat bagian dari legend
                for j=1:(T+1)
                    i=(j-1);
                    nilait(j)=cellstr(sprintf('Nilai di t=%d',i));
                end
%=============================|
  % Memulai iterasi plot t tertentu
                for y=7:9
                    figure('Name',sprintf('Figure %d Trial %d',y,trppl(tr)),'NumberTitle','off')
                    set(gcf,'renderer','zbuffer');
                    title(strcat('Plot di t tertentu menggunakan metode ',methodnames(y-6),sprintf(' uji ke-%d.',trppl(tr))))
                    xlabel('Harga Minyak Mentah di Pasar (VV)')
                    ylabel('Nilai Undeveloped Proyek (F)')
                    hold on
                    for j=1:(T+1)
                        if (j>length(colors))
                            if (mod(j,length(colors))==1)
                                x=1;
                            else
                                x=x+1;
                            end
                        else
                            x=j;
                        end
                       tj(j)=round((((T+1)-j)-tmin)/w);
                       plot(VV,MatrixIterF{trppl(tr),y-6}(:,(tj(j)+1)),colors(x));
                    end
                    legend(nilait,'Location','NorthWest');
                    hold off
                end
            end
%=============================|
%=============================|
  % PEMBAGIAN UNTUK BARIS DAN KOLOM
% HARGA DAN WAKTU
%=============================|
          otherwise
            for j=1:(T+1)
                tj(j)=round((((T+1)-j)-tmin)/w);
            end
        end
%=============================|
  %pembagian posisi partisi harga
    fprintf('\n');
    disp('Harga Baris');
    for ss=1:length(VV)
        varv(ss,1)=VV(ss);
        varv(ss,2)=(round(((VV(ss))-Vmin)/p))+1;
        if (varv(ss,1)<100)
            fprintf('%0.2f %0.2f\n',varv(ss,1),varv(ss,2));
        else
            fprintf('%0.2f %0.2f\n',varv(ss,1),varv(ss,2));
        end
    end
%=============================|
  %pembagian posisi partisi waktu
    fprintf('\n');
    disp('Tahun Kolom');
    for ss=1:(T+1)
        vart(ss,1)=ss-1;
        vart(ss,2)=tj(ss)+1;
        fprintf('%0.2f %0.2f\n',vart(ss,1),vart(ss,2));
    end
%=============================|
  % PLOTTING SENSITIVITAS
% Nilai F(V,t) Terhadap parameter yang berubah-ubah
%=============================|
      fprintf('====================================================\n')
    trialsv=0;
    while trialsv<1
        trialsv=input('number of sensitivity that will be plotted = ');
        if trialsv<1
            disp('too small, repeat again!');
        end
    end
%=============================|
  %input harga
    for sv=1:trialsv
        fprintf('==========================\n')
        inputv(sv)=Vmin-1;
        while inputv(sv)<Vmin || inputv(sv)>PMax
            fprintf('price of trial-%d that will be plotted [USD%0.2f - USD%0.2f] = ',sv,Vmin,PMax);
            inputv(sv)=input('');
        end
%=============================|
  %input tahun
% fprintf('====================================================\n')
        inputt(sv)=tmin-1;
        while inputt(sv)<tmin || inputt(sv)>T
            fprintf('year of trial-%d will be plotted [%d-%d] = ',sv,tmin,T);
            inputt(sv)=input('');
        end
%=============================|
  %pengubahan dari inputan ke penentuan partisi
        ti(sv)=tj(inputt(sv)+1)+1;
        vi(sv)=(round(((inputv(sv))-Vmin)/p))+1;
    end
%=============================|
  %daftar simbol per-metode
    syms=['s';'+';'o'];
%=============================|
  %mulai plot sensitivitas
%clf
    for sv=1:trialsv
        figure('Name',sprintf('Figure Sensitivitas ke-%d',sv),'NumberTitle','off')
        set(gcf,'renderer','zbuffer');
        title(strcat('Plot sensitivitas terhadap ',scetype(scenario),sprintf(' di posisi F(%d,%d)',inputv(sv),inputt(sv))))
        xlabel(xlabels)
        ylabel('Nilai Undeveloped Proyek')
        hold on
        for js=1:3
            fprintf('==================================\n')
            fprintf('\nSensitivitas dengan metode %s di posisi F(%d,%d)\n',methodnames{js},inputv(sv),inputt(sv))
            for tr=1:trial
                methods{tr}=sprintf('Nilai uji ke-%d = %f\n',tr,MatrixIterF{tr,js}(vi(sv),ti(sv)));
                fprintf(methods{tr});
                plMatrixIterF(tr,js)=MatrixIterF{tr,js}(vi(sv),ti(sv));
            end
            plot(sce(1:trial,scenario),plMatrixIterF(1:trial,js), strcat(colors(length(colors)-js+1),syms(js)));
            hold all
        end
        grid on
        legend(methodnames,'Location','NorthEast');
        hold off
    end
%=============================|
  %pertanyaan pengulangan proses running
    fprintf('\n');
    fprintf('=============================\n')
    disp('re-run?');
    disp('0 -> No.');
    disp('1 -> Yes.');
    repeat=2;
    while repeat<0 || repeat>1
        repeat=input('[0-1] = ');
        if repeat<0 || repeat>1
            disp('Mohon masukkan pilihan dengan benar!');
        end
        fprintf('=================SELESAI======================\n')
    end
%=%=============================|
end
%=======


Data : https://app.box.com/s/07gf6mzkhh9g93zd0rts
range : b2:b2082

I have a new problem here beside the first question,

I have to change the range form imax+1 to imax-1, before that
I have a matrix size imax+1 (x axis) and jmax+1 (y axis), the first row of x axis will be assign to this max(Vmin-(D(tr)*exp((-r)*tau)),0);
and the (imax+1) will be this max(PMax-(D(tr)*exp(-r*tau)),0);
and the jmax+1 axis will be filled with maxwa (on code)

and i only need to process the interior
what should i change then?? alway stuck on dimension miss match



sorry for asking too much :( #urgent #desperate


thank for helping :))

Viewing all articles
Browse latest Browse all 10

Trending Articles