Control Engineering
Відкрити в Telegram
جهت ارتباط با ادمینها، به گروه کانال مراجعه کنین. https://t.me/+k1OZ6I6uW5YzY2I8
Показати більше2 306
Підписники
Немає даних24 години
+77 днів
+2230 днів
Архів дописів
2 305
STM32 IOT Projects for Beginners
A Hands-On Guide to Connecting Sensors, Programming Embedded Systems, Build IoT Devices with STM32.
(from TAcademy)
@ControlEngineering98
2 305
انالله واناالیه راجعون
با سلام و عرض ادب خدمت دوستان
فقدان سید احمد سید عباسزاده همگی ما را اندوهگین ساخت. غفران و رحمت الهی برای آن عزیز از دست رفته
و صبر و سلامتی را برای خانواده ایشان آرزومندیم
طبق تصمیم عزیزان و برای آرامش روح پرفتوح سید احمد سید عباسزاده
مبلغی برای کار نیک و احسان برای آن بزرگوار جمعآوری میگردد
ممنون از همکاری شما عزیزان
شماره حساب
5022291326637657
بانک پاسارگاد
سید امیرمحمد سیدی
2 305
اسامی پذیرفته شدگان کارشناسی ارشد بدون آزمون دانشگاه صنعتی اصفهان
#استعداد_درخشان
@ControlEngineering98
2 305
Parameters
----------
point : array-like
The point.
k: int
The number of nearest neighbors.
return_dist_sq : boolean
Whether to return the squared Euclidean distances.
Returns
-------
list<array-like>
The nearest neighbors.
If `return_dist_sq` is true, the return will be:
[(dist_sq, point), ...]
else:
[point, ...]
"""
return self._get_knn(self._root, point, k, return_dist_sq, [])
def get_nearest(self, point, return_dist_sq=True):
"""Returns the nearest neighbor.
Parameters
----------
point : array-like
The point.
return_dist_sq : boolean
Whether to return the squared Euclidean distance.
Returns
-------
array-like
The nearest neighbor.
If the tree is empty, returns `None`.
If `return_dist_sq` is true, the return will be:
(dist_sq, point)
else:
point
"""
l = self._get_knn(self._root, point, 1, return_dist_sq, [])
return l[0] if len(l) else None
if __name__ == '__main__':
import random
# Generate some random data points
num_points = 1000
dim = 2
points = [[random.uniform(0, 100) for _ in range(dim)] for _ in range(num_points)]
# Create a KDTree instance
kd_tree = KDTree(points, dim)
# Add a few more points to the KDTree
additional_points = [[random.uniform(0, 100) for _ in range(dim)] for _ in range(100)]
for point in additional_points:
kd_tree.add_point(point)
# Define a query point
query_point = [50, 50] # Example query point
# Find the nearest neighbor to the query point
nearest_neighbor = kd_tree.get_nearest(query_point)
print("Nearest neighbor:", nearest_neighbor)
# Find the 5 nearest neighbors to the query point
k_nearest_neighbors = kd_tree.get_knn(query_point, k=5)
print("5 Nearest neighbors:", k_nearest_neighbors)2 305
یک پیاده سازی ساده از ساختمان داده kd-tree:
import heapq
class KDTree(object):
"""
A super short KD-Tree for points...
so concise that you can copy paste into your homework
without arousing suspicion.
This implementation only supports Euclidean distance.
The points can be any array-like type, e.g:
lists, tuples, numpy arrays.
Usage:
1. Make the KD-Tree:
`kd_tree = KDTree(points, dim)`
2. You can then use `get_knn` for k nearest neighbors or
`get_nearest` for the nearest neighbor
points are be a list of points: [[0, 1, 2], [12.3, 4.5, 2.3], ...]
"""
def __init__(self, points, dim, dist_sq_func=None):
"""Makes the KD-Tree for fast lookup.
Parameters
----------
points : list<point>
A list of points.
dim : int
The dimension of the points.
dist_sq_func : function(point, point), optional
A function that returns the squared Euclidean distance
between the two points.
If omitted, it uses the default implementation.
"""
if dist_sq_func is None:
# Eucledian Distance Function as Default
dist_sq_func = lambda a, b: sum((x - b[i]) ** 2 for i, x in enumerate(a))
def make(points, i=0):
# Create the root tree
if len(points) > 1:
points.sort(key=lambda x: x[i])
i = (i + 1) % dim
m = len(points) >> 1
return [make(points[:m], i), make(points[m + 1:], i), points[m]]
if len(points) == 1:
return [None, None, points[0]]
def add_point(node, point, i=0):
if node is not None:
# Difference in the Specific Dimention
dx = node[2][i] - point[i]
for j, c in ((0, dx >= 0), (1, dx < 0)):
if c and node[j] is None:
node[j] = [None, None, point]
elif c:
add_point(node[j], point, (i + 1) % dim)
def get_knn(node, point, k, return_dist_sq, heap, i=0, tiebreaker=1):
if node is not None: # if any node is defined(root already created)
dist_sq = dist_sq_func(point, node[2])
dx = node[2][i] - point[i]
if len(heap) < k:
heapq.heappush(heap, (-dist_sq, tiebreaker, node[2]))
elif dist_sq < -heap[0][0]:
heapq.heappushpop(heap, (-dist_sq, tiebreaker, node[2]))
i = (i + 1) % dim
# Goes into the left branch, then the right branch if needed
for b in (dx < 0, dx >= 0)[:1 + (dx * dx < -heap[0][0])]:
get_knn(node[b], point, k, return_dist_sq, heap, i, (tiebreaker << 1) | b)
if tiebreaker == 1:
return [(-h[0], h[2]) if return_dist_sq else h[2]
for h in sorted(heap)][::-1]
def walk(node):
if node is not None:
for j in 0, 1:
for x in walk(node[j]):
yield x
yield node[2]
self._add_point = add_point
self._get_knn = get_knn
self._root = make(points)
self._walk = walk
def __iter__(self):
return self._walk(self._root)
def add_point(self, point):
"""Adds a point to the kd-tree.
Parameters
----------
point : array-like
The point.
"""
if self._root is None:
self._root = [None, None, point]
else:
self._add_point(self._root, point)
def get_knn(self, point, k, return_dist_sq=True):
"""Returns k nearest neighbors.2 305
این ویدیو یک نشان از اهمیت ساختمان داده و الگوریتم در رباتیک هستش.
بهش توجه ویژه داشته باشید چرا که اگر بخوایم تسک هامون رو realtime انجام بدیم
باید بتونیم مساله رو جوری اوکی که با هزینه پردازش پایین انجامش بدیم.
در نتیجه باید الگوریتم ها رو شدیدا جدی بگیریم.
https://youtu.be/BK5x7IUTIyU
2 305
فلسفیدن بلد نیستید...
کاربرد شبکه هایی مثل یوتیوب، برای یه آدم عادی آپلود کردن فیلمه.
ولی برای یه آدم خلاق میتونه دیتا بیس باشه :)
چرا؟ چون اجازه میده رایگاه فایل آپلود کنی.
ولی با قوانین خودش. یعنی فقط میتونی ویدیو آپلود کنی.
این ریپازیتوری یک پیاده سازی از این هست که فورمت باینری فایل مورد نظرتون رو تبدیل به یک ویدیو میکنه و حالا میتونین رو یوتیوب نگهش دارین!
بعدا که لازم داشتین دانلود کنین و تبدیل کنین به فایلتون و استفاده کنین...
کدش با زبان julia نوشته شده و اونی هم که نوشته دانشجوی دکترای ریاضی کاربردیه تو استنفورد(!) هست.
البته به دلیل مساله پهنای باند احتمالا استفاده از این مند در لارج اسکیل سخته ولی و خوب پروژه فان باحالیه.
2 305
در MATLAB، تابع vpa و digits برای تنظیم دقت اعشار در محاسبات عددی استفاده میشه. با استفاده از تابع vpa، میتونید عدد مورد نظر خود را با دقت دلخواه تعریف کنید، در حالی که تابع digits برای تنظیم تعداد ارقام اعشاری نمایش داده شده. این قابلیتها برای محاسبات دقیق و دقت بالا در MATLAB بسیار مفیده. در زیر چند مثال کاربردی از استفاده این دو تابع آورده شده:
مثال ۱:
digits(10);
disp(vpa(pi))
مثال ۲:
digits(20);
sqrt_2 = sqrt(2);
matlab
>> ans =
1.4142135623730950488
با استفاده از توابع vpa و digits در MATLAB، میتونید دقت محاسبات خود را به دقت دلخواه تنظیم کرده و نتایج دقیقتری رو در برنامههای خود به دست بیارید.2 305
Repost from AzarApply (PhDFinder)
خبر خوب برای متقاضیان تحصیل در کانادا 🇨🇦
میزان فاند برای دانشجویان دکتری و پست داک افزایش خواهد یافت.
https://www.nature.com/articles/d41586-024-01124-2
🌐 AzarApply.ir
🆔 @AzarApply
2 305
دوستان یک راه خیلی خوشگل برای آنالیز کنترلی یک سیستم از دینامیک تا فیدبک حالت و طراحی رویتگر حالت رو در این فایل برروی یک سیستم پاندول و ارابه(غیرخطی) پیاده کردم.
حتما نگاه کنین برای پروژه هاتون به درد میخوره.
کدش هم تو این ریپازیتوری گیت هاب هست.
در آینده در مورد دینامیک و شبیه سازیش بیشتر مینویسم براتون.
#matlab #nonlineardynamics
2 305
https://www.linkedin.com/posts/activity-7185651044536786945-mCcx?utm_source=share&utm_medium=member_android
#phd
#robotics
#ML
#CS
#germany
@ControlEngineering98
