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ś?
- Rejestracja:ponad 13 lat
- Ostatnio:ponad 11 lat
- Postów:67
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.,..
- Rejestracja:prawie 16 lat
- Ostatnio:12 miesięcy
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.
kasiunia206
ale jak zmienie na int to wyskakuje komentarz ze sugerowana jest zmiana na float... Jak zrobi do tego macierz 11x 11? a ponadto wykres danych kt ore wychodza?
- Rejestracja:ponad 13 lat
- Ostatnio:ponad 11 lat
- Postów:67
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);
}
}
- Rejestracja:ponad 13 lat
- Ostatnio:ponad 11 lat
- Postów:67
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