Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Aqui está um exemplo de um programa em PHP que implementa o método de Heun para integrar a equação diferencial que você mencionamos anteriormente e cria um gráfico dos resultados usando a biblioteca GD:
- <?php
- // Constantes
- $m = 2.6; // Massa em g
- $L = 1.0; // Comprimento em m
- $R = 0.03; // Raio em m
- // Valores iniciais
- $theta0 = 0.05; // Ângulo inicial em rad
- $w0 = 0.0; // Velocidade angular inicial em rad/s
- $t0 = 0.0; // Tempo inicial em s
- $h = 0.1; // Passo de tempo em s
- // Arrays para armazenar os resultados
- $t = [$t0];
- $theta = [$theta0];
- $w = [$w0];
- // Loop de tempo
- while ($t[count($t) - 1] < 100.0) {
- // Cálculo dos valores intermediários
- $k1x = $h * $w[count($w) - 1];
- $k1v = $h * ($w[count($w) - 1] < 0.0 ? -1.0 : 1.0);
- $k2x = $h * ($w[count($w) - 1] + $k1v);
- $k2v = $h * (($w[count($w) - 1] + $k1v) < 0.0 ? -1.0 : 1.0);
- // Atualização dos valores de θ e w
- array_push($theta, $theta[count($theta) - 1] + ($k1x + $k2x) / 2.0);
- array_push($w, $w[count($w) - 1] + ($k1v + $k2v) / 2.0);
- // Atualização do tempo
- array_push($t, $t[count($t) - 1] + $h);
- }
- // Cria o gráfico usando a GD
- $width = 800;
- $height = 600;
- $image = imagecreate($width, $height);
- $background = imagecolorallocate($image, 255, 255, 255);
- $color1 = imagecolorallocate($image, 255, 0, 0);
- $color2 = imagecolorallocate($image, 0, 0, 255);
- // Desenha os eixos
- imageline($image, 50, $height - 50, $width - 50, $height - 50, 0);
- imageline($image, 50, $height - 50, 50, 50, 0);
- // Desenha os gráficos
- for ($i = 0; $i < count($t) - 1; $i++) {
- $x1 = 50 + ($t[$i] - $t0) / (100.0 - $t0)
- ($width - 100);
- $y1 = $height - 50 - $theta[$i] / 0.2 * ($height - 100);
- $x2 = 50 + ($t[$i + 1] - $t0) / (100.0 - $t0) * ($width - 100);
- $y2 = $height - 50 - $theta[$i + 1] / 0.2 * ($height - 100);
- imageline($image, $x1, $y1, $x2, $y2, $color1);
- }
- for ($i = 0; $i < count($t) - 1; $i++) {
- $x1 = 50 + ($t[$i] - $t0) / (100.0 - $t0) * ($width - 100);
- $y1 = $height - 50 - $w[$i] / 20.0 * ($height - 100);
- $x2 = 50 + ($t[$i + 1] - $t0) / (100.0 - $t0) * ($width - 100);
- $y2 = $height - 50 - $w[$i + 1] / 20.0 * ($height - 100);
- imageline($image, $x1, $y1, $x2, $y2, $color2);
- }
- // Salva o gráfico em um arquivo
- imagepng($image, "plot.png");
- // Limpa a memória
- imagedestroy($image);
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement