witam , mam problem z napisaniem w c lub Matlabie programu , który rozwiązuje Równanie Laplacea metoda Jacobiego , dowolny warunek brzegowy, np [0,1] , z macierza 11X11... nie wiem kompletnie od czego powinnam zaczac pisac prokram, kod, pomógłby mi ktoś?
0
0
#include<iostream>
#include<fstream>
#include<conio.h>
#include<math.h>
using namespace std;
const int iter = 3000; // liczba iteracji
const float eps = 0.01;
const float pi = 3.141;
const int terms = 100;
const int L =1;
const float step = 0.02;
const float xo = 0.0;
const float yo = 0.0;
float rozmiar = L/step;
double analityczne (double x, double y, int koniec )
{
double suma = 0.0;
for(int n = 1;n <= koniec;n += 2)
{
suma += ((400.0)/(pi*n)) * sin(n*pi*x/L) * sinh(n*pi*y/L)/sinh(n*pi);
}
return suma;
}
main()
{
ofstream dane;
ofstream analt;
dane.open("Wyniki obliczen1.txt");
analt.open("Wyniki analityczne1.txt");
double macierzK [rozmiar+1][rozmiar+1];
double macierzP [rozmiar-1][rozmiar-1];
double macierzA [rozmiar+1][rozmiar+1];
for(int i = 0; i < rozmiar+1; ++i)
{
for(int j = 0; j < rozmiar+1; ++j)
{
if ((i == rozmiar))
{
macierzK[i][j] = 11;
}
else
{
macierzK[i][j]=0.0;
}
} // inicjalizacja macierzy , warunki brzegowe
}
for(int i = 0; i < rozmiar + 1; ++i) // inicjalizacja
{
for(int j = 0; j < rozmiar + 1; ++j)
{
macierzA[i][j] = 0;
}
}
for(int i = 0; i < rozmiar + 1; ++i) // wyniki z formuły analitycznej
{
for(int j = 0; j < rozmiar + 1; ++j)
{
macierzA[i][j] = analityczne(xo + i*step,yo + j*step,terms);
}
}
Czy dobrze napisałam kod? bo wyskakuje mi błąd.,..
0
float rozmiar = L/step;
double macierzK [rozmiar+1][rozmiar+1];
error: size of array 'macierzK' has non-integral type 'float'
Rozmiar tablicy musi być typu całkowitego.
0
I nawiasu zamykającego main'a brakuje...
0
tak napisa lam program , ale czy dobrze?
#include<iostream>
#include<fstream>
#include<conio.h>
#include<math.h>
using namespace std;
const int iter = 3000; // liczba iteracji
const float eps = 0.01;
const float pi = 3.141;
const int terms = 100;
const int L =1;
const float step = 0.02;
const float xo = 0.0;
const float yo = 0.0;
float rozmiar = L/step;
double analityczne (double x, double y, int koniec )
{
double suma = 0.0;
for(int n = 1;n <= koniec;n += 2)
{
suma += ((400.0)/(pi*n)) * sin(n*pi*x/L) * sinh(n*pi*y/L)/sinh(n*pi);
}
return suma;
}
main()
{
ofstream dane;
ofstream analt;
dane.open("Wyniki obliczen1.txt");
analt.open("Wyniki analityczne1.txt");
double macierzK [rozmiar+1][rozmiar+1];
double macierzP [rozmiar-1][rozmiar-1];
double macierzA [rozmiar+1][rozmiar+1];
for(int i = 0; i < rozmiar+1; ++i)
{
for(int j = 0; j < rozmiar+1; ++j)
{
if ((i == rozmiar))
{
macierzK[i][j] = 11;
}
else
{
macierzK[i][j]=0.0;
}
} // inicjalizacja macierzy , warunki brzegowe
}
for(int i = 0; i < rozmiar + 1; ++i) // inicjalizacja
{
for(int j = 0; j < rozmiar + 1; ++j)
{
macierzA[i][j] = 0;
}
}
for(int i = 0; i < rozmiar + 1; ++i) // wyniki z formuły analitycznej
{
for(int j = 0; j < rozmiar + 1; ++j)
{
macierzA[i][j] = analityczne(xo + i*step,yo + j*step,terms);
}
}
0
Moze podaj jakies wzory zeby to mozna bylo sprawdzic.
0
http://mst.mimuw.edu.pl/lecture.php?lecture=mo2&part=Ch5#S3.SS1 tu jest o tej metodzie Jacobiego.
a rówanie Laplacea ma postać jak na http://pl.wikipedia.org/wiki/R%C3%B3wnanie_r%C3%B3%C5%BCniczkowe_Laplace%27ae%27a tylko że rozważam tu dwa wymiaru.
Warunki brzegowe od 0 do 1. Rozważac mam rozwiązanie na siatce.
I mam tu otrzymać macierz 11x 11 ale tu kompletnie nie mam pojęcia o co chodzi