ar
Feedback
Control Engineering

Control Engineering

الذهاب إلى القناة على Telegram

جهت ارتباط با ادمین‌ها، به گروه کانال مراجعه کنین. https://t.me/+k1OZ6I6uW5YzY2I8

إظهار المزيد
2 306
المشتركون
لا توجد بيانات24 ساعات
+77 أيام
+2230 أيام
أرشيف المشاركات

STM32 IOT Projects for Beginners A Hands-On Guide to Connecting Sensors, Programming Embedded Systems, Build IoT Devices with STM32. (from TAcademy) @ControlEngineering98

اینم شماره حساب خالی
اینم شماره حساب خالی

انالله واناالیه راجعون با سلام و عرض ادب خدمت دوستان فقدان سید احمد سید عباس‌زاده همگی ما را اندوهگین ساخت. غفران و رحمت الهی
انالله واناالیه راجعون با سلام و عرض ادب خدمت دوستان فقدان سید احمد سید عباس‌زاده همگی ما را اندوهگین ساخت. غفران و رحمت الهی برای آن عزیز از دست رفته و صبر و سلامتی را برای خانواده ایشان آرزومندیم طبق تصمیم عزیزان و برای آرامش روح پرفتوح سید احمد سید عباس‌زاده مبلغی برای کار نیک و احسان برای آن بزرگوار جمع‌آوری می‌گردد ممنون از همکاری شما عزیزان شماره حساب 5022291326637657 بانک پاسارگاد سید امیرمحمد سیدی

اسامی پذیرفته شدگان کارشناسی ارشد بدون آزمون دانشگاه صنعتی اصفهان #استعداد_درخشان @ControlEngineering98



        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)

یک پیاده سازی ساده از ساختمان داده 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.

این ویدیو یک نشان از اهمیت ساختمان داده و الگوریتم در رباتیک هستش. بهش توجه ویژه داشته باشید چرا که اگر بخوایم تسک هامون رو realtime انجام بدیم باید بتونیم مساله رو جوری اوکی که با هزینه پردازش پایین انجامش بدیم. در نتیجه باید الگوریتم ها رو شدیدا جدی بگیریم. https://youtu.be/BK5x7IUTIyU

FixedStepODESolvers.pdf7.51 KB

✅ پورعباس: نتایج اولیۀ ارشد، احتمالا اواخر این هفته و پس از پایان انتخاب رشته دکتری منتشر خواهد شد (مرجع خبر). 🥇 خانه برق

فلسفیدن بلد نیستید... کاربرد شبکه هایی مثل یوتیوب، برای یه آدم عادی آپلود کردن فیلمه. ولی برای یه آدم خلاق میتونه دیتا بیس باشه :) چرا؟ چون اجازه میده رایگاه فایل آپلود کنی. ولی با قوانین خودش. یعنی فقط میتونی ویدیو آپلود کنی. این ریپازیتوری یک پیاده سازی از این هست که فورمت باینری فایل مورد نظرتون رو تبدیل به یک ویدیو میکنه و حالا میتونین رو یوتیوب نگهش دارین! بعدا که لازم داشتین دانلود کنین و تبدیل کنین به فایلتون و استفاده کنین... کدش با زبان julia نوشته شده و اونی هم که نوشته دانشجوی دکترای ریاضی کاربردیه تو استنفورد(!) هست. البته به دلیل مساله پهنای باند احتمالا استفاده از این مند در لارج اسکیل سخته ولی و خوب پروژه فان باحالیه.

در MATLAB، تابع vpa و digits برای تنظیم دقت اعشار در محاسبات عددی استفاده می‌شه. با استفاده از تابع vpa، می‌تونید عدد مورد نظر خود را با دقت دلخواه تعریف کنید، در حالی که تابع digits برای تنظیم تعداد ارقام اعشاری نمایش داده شده. این قابلیت‌ها برای محاسبات دقیق و دقت بالا در MATLAB بسیار مفیده. در زیر چند مثال کاربردی از استفاده این دو تابع آورده شده: مثال ۱:
digits(10);
disp(vpa(pi))
مثال ۲:
digits(20);
sqrt_2 = sqrt(2);
 matlab
 >> ans =
 
        1.4142135623730950488
با استفاده از توابع vpa و digits در MATLAB، می‌تونید دقت محاسبات خود را به دقت دلخواه تنظیم کرده و نتایج دقیق‌تری رو در برنامه‌های خود به دست بیارید.

خبر خوب برای متقاضیان تحصیل در کانادا 🇨🇦 میزان فاند برای دانشجویان دکتری و پست داک افزایش خواهد یافت. https://www.nature.com/articles/d41586-024-01124-2 🌐 AzarApply.ir 🆔 @AzarApply

حدس بزنین این چیه! پ.ن. سعی کنین در حد توان فلسفی برخورد کنین با موضوع!

دوستان یک راه خیلی خوشگل برای آنالیز کنترلی یک سیستم از دینامیک تا فیدبک حالت و طراحی رویتگر حالت رو در این فایل برروی یک سیستم پاندول و ارابه(غیرخطی) پیاده کردم. حتما نگاه کنین برای پروژه هاتون به درد میخوره. کدش هم تو این ریپازیتوری گیت هاب هست. در آینده در مورد دینامیک و شبیه سازیش بیشتر مینویسم براتون. #matlab #nonlineardynamics

کتاب مقدمه ای ساده برای پایتون #پایتون #python #book @controlengineering98

PythonNotesForProfessionals #book #python @controlengineering98

Statistics And Machine Learning.pdf8.89 MB